9

如果上下文菜单在 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 具有子菜单 SubComm1。

我使我的 ContextMenu 更加灵活:

<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 元素?

4

2 回答 2

15

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

<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.ItemContainerStyleandMenuItem.ItemTemplate来设置子菜单的样式。

于 2013-09-03T11:37:09.567 回答
2

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

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

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

来源:https ://www.c-sharpcorner.com/uploadfile/mahesh/menus-in-wpf/

于 2020-10-29T03:55:54.867 回答