0

我有一个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>

Saveable、Copyable 和 Removeable 是来自用作TreeViewItem.

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

想法?

谢谢!

4

1 回答 1

2

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

我认为可能可行的一个选项是在样式中添加一个EventSetterfor 。但是,这不起作用 - 可能是因为 中的项目与.MenuItem.ClickTreeViewItemContextMenuTreeViewItems

于 2009-05-13T16:17:00.690 回答