简体   繁体   中英

TreeViewItems and ContextMenu

I have a little problem with specifying ContextMenu for particular TreeViewItem:

    <TreeView x:Name="_filesTree">
    <TreeView.Resources>
        <ContextMenu x:Key="_rootContextMenu">
            <MenuItem Header="Add..." Click="MenuItem_Click" />
        </ContextMenu>
    </TreeView.Resources>
    <TreeViewItem Header="Persistent" ContextMenu="{DynamicResource _rootContextMenu}"/>
    <TreeViewItem Header="Temporary" ContextMenu="{DynamicResource _rootContextMenu}" />
</TreeView>

Click handler:

        private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        Point menuClickPoint = ((sender as FrameworkElement).Parent as ContextMenu).TranslatePoint(new Point(0, 0), _filesTree);
        DependencyObject obj = _filesTree.InputHitTest(menuClickPoint) as DependencyObject;

        while (obj != null && !(obj is TreeViewItem))
        {
            obj = VisualTreeHelper.GetParent(obj);
        }

        (obj as TreeViewItem).Items.Add("(new)");
    }

And in my *MenuItem_Click* event handler I am adding new TreeViewItems to the clicked item, what works fine. But after adding new (for example to "Persistent" subtree), right click on this new subitem opens context menu again. This is something what I dont need, because I need another context menu for these new added items (with Remove option). How to achive context menu will be opening only when right clicking on root item (TextBlock) and not inside subtree?

Thank you

I explicitly defined new context menu for each subitem:

        TreeViewItem tvi = new TreeViewItem();
        tvi.ContextMenu =(ContextMenu) this._filesTree.Resources["_subItemContextMenu"];
        tvi.Header = "(new)";

        (obj as TreeViewItem).Items.Add(tvi);

*_subItemContextMenu* in treeview resources:

<ContextMenu x:Key="_subItemContextMenu">
        <MenuItem Header="Remove" Click="MenuItem_Remove" />
</ContextMenu>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM