我的应用程序包含一个TreeView
支持一组命令,但命令可能会左右移动菜单之间,只出现在一些菜单,而不是其他,在多个菜单等共享
我知道的一组我在编译时支持所有的命令,所以理论上我可以定义一个<MenuItem>
与资源x:Key
属性在我的每个人<TreeView.Resources>
部分。 然而,对于被点击任何给定的节点,该节点出现的菜单项只能在运行时确定。 我可以绑定ContextMenu.ItemsSource
在我的应用程序的东西,返回MenuItem[]
但为了建立这个数组,然后,我会需要访问被定义静态早在XAML文件中的MenuItems。
我做这一切错了吗? 或者是有没有办法做我想做什么?
绑定你ContextMenu.ItemsSource而不是一个菜单项[],但一个的ObservableCollection <YourMenuClass>。 YourMenuClass应包含要绑定的头和其他参数,也许是命令。 然后使用模板来生成您的菜单项。
<ContextMenu ItemsSource="{Binding MenuItemList}">
<ContextMenu.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding Path=Name}" Command="{Binding MyCommand}" />
</DataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
而不是使用一个ItemTemplate的,上下文菜单提供ItemContainer风格。 这样就可以避免在上面留言,当中提到其内的另一个菜单项的问题。
`<ContextMenu.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Header" Value="{Binding Name}"/>
</Style>
</ContextMenu.ItemContainerStyle>`