c# - 创建动态 WPF 上下文菜单

标签 c# wpf binding contextmenu menuitem

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

相关文章:

c# - 读取前缀文件错误

c# - Winforms + mysql + asp.net 对于具有远程访问功能的 C# 数据库应用程序来说足够了吗?

c# - 像 block 一样实现可拖动的用户界面

c# - 如何将 WPF TextBox 绑定(bind)到作为应用程序主窗口成员的属性

c# - 即使我分配了其他帧,ffmpeg 也会提取第一帧?

c# - MyProject.resources 上的 FileNotFoundException

c# - KnockOut.js 与 Asp.net mvc

c# - 在 WPF 中更改 EventTrigger 上的按钮背景颜色

c# - GetBindingExpression 在第二次调用时返回 null

javascript - 如何在 Angular 提交表单之前不更新模型?