Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TreeViewItem上的上下文菜单调用TreeViewItem';什么方法?_C#_Wpf_Treeview_Contextmenu_Treeviewitem - Fatal编程技术网

C# TreeViewItem上的上下文菜单调用TreeViewItem';什么方法?

C# TreeViewItem上的上下文菜单调用TreeViewItem';什么方法?,c#,wpf,treeview,contextmenu,treeviewitem,C#,Wpf,Treeview,Contextmenu,Treeviewitem,我有一个TreeView设置,这样每个TreeViewItem都有作为样式应用的右键单击上下文菜单。比如: <Grid.Resources> <ContextMenu x:Key="contextMenu"> <MenuItem Header="Save" IsEnabled="{Binding Path=Saveable}"/> <MenuItem Header="Copy" IsEnabled="{Bin

我有一个
TreeView
设置,这样每个
TreeViewItem
都有作为
样式应用的右键单击上下文菜单。比如:

<Grid.Resources>
    <ContextMenu x:Key="contextMenu">
         <MenuItem Header="Save"  IsEnabled="{Binding Path=Saveable}"/>
         <MenuItem Header="Copy" IsEnabled="{Binding Path=Copyable}"/>
         <MenuItem Header="Remove" IsEnabled="{Binding Path=Removeable}"/>
    </ContextMenu>
    <Style TargetType="TreeViewItem">
        <Setter Property="ContextMenu" Value="{StaticResource contextMenu}" />
    </Style>
</Grid.Resources>

可保存、可复制和可移除是来自用作
TreeViewItem
的对象的属性

我要寻找的是,当用户单击
菜单项时,它会单击所选对象的相应方法。因此,单击“Save”
MenuItem
将调用
object.Save()
,“Copy”调用
object.Copy()
,等等。但我不确定语法是什么样的,或者从典型的WPF样式来看,这个想法实际上是否可以接受。我知道我可以在包含的窗口中创建一个新的事件处理程序,但我更喜欢所选项目本身来处理事件

想法


谢谢

不幸的是,我不认为有一种自动化的方法可以做到这一点。最接近的选项是为
ContextMenu
中的每个项目设置
RoutedUICommand
,然后为类中的每个项目创建
CommandBinding
。如果您想让它们转到
TreeViewItem
,您可能需要对
TreeViewItem
进行子类化,并在那里设置
CommandBindings

我认为可行的一个选项是为
MenuItem添加
EventSetter
。但是,这不起作用-可能是因为
ContextMenu
中的项目与
TreeViewItems
位于不同的可视树中