创建动态WPF上下文菜单

本文关键字:菜单 上下文 WPF 动态 创建 | 更新日期: 2023-09-27 18:17:22

我在我的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>

和设置为ItemSource属性的菜单的ItemContainerStyle的菜单样式。

谁能告诉我XAML的方法来做到这一点。由于

创建动态WPF上下文菜单

您必须定义 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 是底层源对象中的一个属性。