【问题标题】:Creating dynamic WPF context menu创建动态 WPF 上下文菜单
【发布时间】:2014-08-11 12:02:33
【问题描述】:

我的 ViewModel 中有一个 ObservableCollection,我想创建一个绑定到该集合的 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 方法吗? 谢谢

【问题讨论】:

    标签: c# wpf binding contextmenu menuitem


    【解决方案1】:

    您必须定义 HierarchicalDataTemplate 来绑定子集合,并直接将外部集合绑定到上下文菜单的 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 是基础源对象中的一个属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      • 2017-02-06
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      相关资源
      最近更新 更多