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
位于不同的可视树中