我有一个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。虽然没有运气。有什么想法吗?
答案 0 :(得分:1)
TreeView
有ContextMenuOpening
个事件。根据树级别将事件处理程序参数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();
}