none
C#コードから動的に追加したTreeviewItemにContextMenuをつけたい

    質問

  • C#コードから動的に追加したTreeviewItemにContextMenuをつけたいのですが、以下のようにしてもうまくいきませんでした。
    どのようにすればよいのでしょうか…?

                TreeViewItem childItem = new TreeViewItem();
                childItem.Header = test;
                childItem.MouseRightButtonUp += test_MouseRightButtonUp;
                treeView1.Items.Add(childItem);
    
    
            private void test_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
            {
                ContextMenu contextMenu = new ContextMenu();
                MenuItem menuItem = new MenuItem();
                menuItem.Header = "C#";
                menuItem.Click += menuItem_Click;
                contextMenu.Items.Add(menuItem);
    
                ((TreeViewItem)sender).ContextMenu = contextMenu;
            }

    2019年3月24日 3:26

回答

  • TreeViewにAddする時点でTreeViewItemのContextMenuプロパティに設定しておけば、一々マウスイベントを扱う必要は無いです。

    メニューの表示項目の決定が表示直前である必要があるなら、TreeViewItemのContextMenuOpeningイベントでItemsを操作すれば良いです。

    表示したくないならこのイベントで e.Handled = true; することで表示を抑制できます。

    // MVVMじゃなくちゃダメとか全部XAMLで書くべきだとかは言いませんが、テンプレート回りなどXAMLで扱えば随分手軽になると思うんですがね。

    • 回答としてマーク ttkk_737 2019年3月26日 11:02
    2019年3月24日 3:50