如何在TreeView中仅为一个级别添加上下文菜单

时间:2012-11-07 21:26:27

标签: c# .net wpf xaml mvvm

我有一个TreeView,包含多个级别TreeViewItems

我想在TreeView中只向一个级别的项目添加上下文菜单。但是,我的代码生成一个结果,TreeView中的每个项目都有一个上下文菜单。

这是我的代码:

//.... foreach item in this level.... 

{
ContextMenu cmDatabase = new ContextMenu();
MenuItem menuItem = new MenuItem();
menuItem.Header = "Close Connection";
Image imgMenuIcon = new Image();
imgMenuIcon.Source = new BitmapImage(new Uri("icon.png"));
menuItem.Icon = imgMenuIcon;
cmDatabase.Items.Add(menuItem);
treeViewItem.ContextMenu = cmDatabase;
}

我还尝试将所有其他TreeViewItems的contextMenu属性手动设置为null。虽然没有运气。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

TreeViewContextMenuOpening个事件。根据树级别将事件处理程序参数Handled的{​​{1}}属性设置为e。这将丢弃上下文菜单。

true

答案 1 :(得分:1)

如果你的TreeViewItem有一个TextBlock,你可以将ContextMenu附加到它上面。

 Textblock header = "TreeViewItem Text";
 header.ContextMenu = cmDataBase;
 treeViewItem.Header = header;

另外,对于我回答的其他问题,但是在我点击“保存”之前删除了。 :P我将右键单击作为事件(也在标题上)。

 header.MouseRightButtonDown += new MousebuttonEventHandler(rightClickSelection);

 private void rightclickSelection(object sender, MouseButtonEventArgs e) {
      TreeViewItem clickedParent = (sender as TextBlock).Parent as TreeViewItem;
      clickedParent.IsSelected = true;
      clickedParent.UpdateLayout();
 }