Treeview上的上下文菜单未在所选项目上打开

时间:2015-05-13 12:35:33

标签: c# wpf

我有一个带有上下文菜单的树视图,我正在使用转换器来管理它。我不希望菜单在项目上打开,只是希望它在节点上打开。

<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>

当我右键单击某个项目时,没有菜单出现但是现在当我右键单击某个节点时,菜单会出现,但是在之前右键单击的项目位置上。除非您再次右键单击任何项​​目,否则菜单不会被忽略。有什么帮助吗?

1 个答案:

答案 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>