0

我有一个 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。虽然没有运气。有任何想法吗?

4

2 回答 2

1

TreeView一个ContextMenuOpening事件。将Handled事件处理程序参数的属性设置etrue取决于树级别。这将丢弃上下文菜单。

private void treeView1_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
    e.Handled = <tree level does not require a context menu>;
}
于 2012-11-07T21:35:49.360 回答
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();
 }
于 2012-11-07T21:38:30.773 回答