0

のレベルの数を含む TreeView がありますTreeViewItems

TreeView の 1 レベルの項目だけにコンテキスト メニューを追加したいと考えています。ただし、私のコードでは、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 に答える