TreeViewItem上的Context菜单调用TreeViewItem的方法?

时间:2009-05-13 16:05:40

标签: c# wpf treeview contextmenu treeviewitem

我有一个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风格方面实际上是可以接受的。我知道我可以在包含窗口中创建一个新的事件处理程序,但我更喜欢所选项目本身来处理事件。

思想?

谢谢!

1 个答案:

答案 0 :(得分:2)

不幸的是,我认为没有一种自动化的方法。最接近的选项是为RoutedUICommand中的每个项目设置ContextMenu,然后为您班级中的每个项目创建CommandBinding。如果您希望这些内容转到TreeViewItem,您可能需要继承TreeViewItem并在那里设置CommandBindings

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