我有一个带有上下文菜单的树视图,我正在使用转换器来管理它。我不希望菜单在项目上打开,只是希望它在节点上打开。
<BooleanToVisibilityConverter x:Key="VisibilityConverter" />
<ContextMenu x:Key="AddNew" Name="PopMnu" Visibility="{Binding IsFolder,Converter={StaticResource VisibilityConverter}}">
<MenuItem Header="New Symbol..." Click="AddSymbolMenu_Click"/>
<MenuItem Header="New Folder..." Click="NewFolderItem_Click"/>
</ContextMenu>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="ContextMenu" Value="{StaticResource AddNew}"/>
</Style>
当我右键单击某个项目时,没有菜单出现但是现在当我右键单击某个节点时,菜单会出现,但是在之前右键单击的项目位置上。除非您再次右键单击任何项目,否则菜单不会被忽略。有什么帮助吗?
答案 0 :(得分:3)
正如Krishna的评论建议的那样,解决方案是为文件夹创建一个视图模型,为项目创建一个视图模型
public class Folder : ViewModelBase { }
public class Item : ViewModelBase { }
然后你可以为每个定义一个DataTemplate,一个包含一个上下文菜单,另一个没有。
<TreeView Name="SymbolsTreeView" ItemsSource="{Binding Items}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Folder}" ItemsSource="{Binding Items}">
<Grid Background="Red">
<Grid.ContextMenu>
<ContextMenu>
</ContextMenu>
</Grid.ContextMenu>
<TextBlock Text="{Binding Name}"/>
</Grid>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type local:Item}" >
<Grid >
<TextBlock Text="{Binding Name}"/>
</Grid>
</DataTemplate>
</TreeView.Resources>
</TreeView>