我有一个TreeView
设置,以便每个TreeViewItem
都有一个右键单击上下文菜单,作为Style
应用。类似的东西:
<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
的对象。
我正在寻找的是当用户点击MenuItem
时,它会点击所选对象的相应方法。因此,点击“保存”MenuItem
会调用object.Save()
,“复制”调用object.Copy()
等。但我不确定语法是什么样的,或者是否有想法在典型的WPF风格方面实际上是可以接受的。我知道我可以在包含窗口中创建一个新的事件处理程序,但我更喜欢所选项目本身来处理事件。
思想?
谢谢!
答案 0 :(得分:2)
不幸的是,我认为没有一种自动化的方法。最接近的选项是为RoutedUICommand
中的每个项目设置ContextMenu
,然后为您班级中的每个项目创建CommandBinding
。如果您希望这些内容转到TreeViewItem
,您可能需要继承TreeViewItem
并在那里设置CommandBindings
。
我认为可能有用的一个选项是为EventSetter
添加MenuItem.Click
TreeViewItem
样式。但是,这不起作用 - 可能是因为ContextMenu
中的项目位于与TreeViewItems
不同的可视树中。