我的 ViewModel 中有一个 ObservableCollection,我想创建一个绑定(bind)到该集合的 ContextMenu,其中集合中的每个项目都有一个子菜单,并且所有子菜单都相同。 例如,集合是 {10,20,30},子菜单是 - 参数(菜单项) - 设置(菜单项) - 重置(菜单项) - 清除(菜单项) 这样最终的上下文菜单看起来像这样\ - 10 - 参数 - 放 - 重置 - 清除 - 20 - 参数 - 放 - 重置 - 清除 - 30 .... 我试过创建资源
<x:Array x:Key="MenuResource" Type=Control>
<MenuItem Header="Param"/>
<MenuItem Header="Set"/>
<MenuItem Header="Reset"/>
<MenuItem Header="Clear"/>
</x:Array>
并设置为 ContextMenu 的 ItemContainerStyle 的 MenuItem Style 中的 ItemSource 属性。 似乎没有任何效果。
有人可以告诉我执行此操作的 XAML 方法吗? 谢谢
最佳答案
您必须定义 HierarchicalDataTemplate
来绑定(bind)子集合,并直接将外部集合绑定(bind)到上下文菜单的 ItemsSource
像这样:
<TextBlock Text="Context menu test">
<TextBlock.ContextMenu>
<ContextMenu ItemsSource="{Binding YourCollection}">
<ContextMenu.ItemTemplate>
<HierarchicalDataTemplate
ItemsSource="{Binding ChildCollection}">
<TextBlock Text="{Binding Name}"/>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
假设 Name
是底层源对象中的一个属性。
关于c# - 创建动态 WPF 上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25242830/