WPF如何根据treeviewitem类型更改contextmenu项?

Jam*_*eet 3 c# wpf treeview xaml contextmenu

我有一个TreeView项目,我想要ContextMenu只弹出第二层项目.我该怎么做呢?

Dav*_*mer 5

我假设你绑定了你TreeView的项目列表.如果是这样,第一和第二层项目是否可以具有不同的数据类型?然后,您可以HierarchicalDataTemplate为您的第一层类型和DataTemplate第二层类型执行以下操作:

<HierarchicalDataTemplate DataType="{x:Type local:FirstTierType}" ItemsSource="{Binding Items}">
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Name}"  />
    </StackPanel>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type local:SecondTierType}">
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Name}"  />
        <StackPanel.ContextMenu>
            <ContextMenu>
               <MenuItem Header="whatever1" Command="whatever1cmd"></MenuItem>
               <MenuItem Header="whatever2" Command="whatever2cmd"></MenuItem>
               <MenuItem Header="whatever3" Command="whatever2cmd"></MenuItem>
            </ContextMenu>
        </StackPanel.ContextMenu>
    </StackPanel>
</DataTemplate>
.
.
.
<TreeView ItemsSource="{Binding Items}" />
Run Code Online (Sandbox Code Playgroud)