Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 上下文菜单的WPF子菜单_C#_Wpf_Contextmenu - Fatal编程技术网

C# 上下文菜单的WPF子菜单

C# 上下文菜单的WPF子菜单,c#,wpf,contextmenu,C#,Wpf,Contextmenu,如果上下文菜单在xaml中是“硬编码”的,那么很容易添加子菜单。例如: <ContextMenu> <MenuItem Header="Comm1" Command="{Binding Blabla1}"> <MenuItem Header="SubComm1" Command="{Binding Blabla2}"></MenuItem> </MenuItem> <MenuItem Com

如果上下文菜单在xaml中是“硬编码”的,那么很容易添加子菜单。例如:

<ContextMenu>
    <MenuItem Header="Comm1" Command="{Binding Blabla1}">
        <MenuItem Header="SubComm1" Command="{Binding Blabla2}"></MenuItem>
    </MenuItem>
    <MenuItem Command="Comm2"></MenuItem>
    <MenuItem Command="Comm3"></MenuItem>
</ContextMenu>

这意味着ContextMenu有三个元素(Comm1、Comm2和Comm3),Comm1有子菜单SubC1

我已使我的上下文菜单更加灵活:

<ContextMenu ItemsSource="{Binding ContextMenuItemsSource}">
    <ContextMenu.ItemContainerStyle>
        <Style TargetType="MenuItem">
            <Setter Property="Header" Value="{Binding ContextMenuCommandHeader}"></Setter>
            <Setter Property="Command" Value="{Binding ContextMenuCommand}"></Setter>
        </Style>
     </ContextMenu.ItemContainerStyle>
</ContextMenu>


基本上,我可以在ContextMenu中有任意数量的元素,任何元素都可以有任何命令。如何将子菜单添加到ContextMenu元素?

您可以将
MenuItem.ItemsSource
设置为嵌套集合。这将为任何菜单项生成子菜单。为此,支持菜单项的模型应该包含子菜单项集合

<ContextMenu ItemsSource="{Binding ContextMenuItemsSource}">
    <ContextMenu.ItemContainerStyle>
        <Style TargetType="MenuItem">
            <Setter Property="ItemsSource" Value="{Binding ContextMenuSubItems}"></Setter>
            <Setter Property="Header" Value="{Binding ContextMenuCommandHeader}"></Setter>
            <Setter Property="Command" Value="{Binding ContextMenuCommand}"></Setter>
        </Style>
     </ContextMenu.ItemContainerStyle>
</ContextMenu>


类似地,您可以设置
MenuItem.ItemContainerStyle
MenuItem.ItemTemplate
来设置子菜单项的样式。

明确指定,无需绑定集合,您可以通过嵌套子菜单来添加子菜单

MenuItem中可以有其他MenuItem元素作为子菜单/子菜单,并且可以升级到多个级别。以下代码将三个子菜单项添加到第一个菜单项

<MenuItem Header="_File">  
   <MenuItem Header="_Open" IsCheckable="true" />  
      <MenuItem Header="_Close" IsCheckable="true" />  
   <MenuItem Header="_Save" IsCheckable="true" />  
</MenuItem>  


来源:

将树数据结构绑定到ItemsSource,并使用转换器将数据转换为MenuItems。