简体   繁体   English

上下文菜单的 WPF 子菜单

[英]WPF Submenu for context menu

If the Context menu is "hardcoded" in xaml, then it is easy to add submenus.如果上下文菜单在 xaml 中是“硬编码”的,那么很容易添加子菜单。 For example:例如:

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

This means, that the ContextMenu has three elements (Comm1, Comm2 and Comm3) and Comm1 has submenu SubComm1.这意味着,ContextMenu 具有三个元素(Comm1、Comm2 和 Comm3),而 Comm1 具有子菜单 SubComm1。

I have made my ContextMenu a bit more flexible:我使我的 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>

Basically I can have any number of elements in ContextMenu, and any element can have any Command.基本上我可以在 ContextMenu 中有任意数量的元素,并且任何元素都可以有任何命令。 How can I add submenu to ContextMenu element?如何将子菜单添加到 ContextMenu 元素?

You can set MenuItem.ItemsSource to the nested collection.您可以将MenuItem.ItemsSource设置为嵌套集合。 This will generate the submenu for any menuitem.这将为任何菜单项生成子菜单。 For this the model backing your MenuItem should have submenuitems collection in it为此,支持您的 MenuItem 的模型应该包含子菜单项集合

<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>

Similarly you can set the MenuItem.ItemContainerStyle and MenuItem.ItemTemplate to style your submenuitems.同样,您可以设置MenuItem.ItemContainerStyleMenuItem.ItemTemplate来设置子菜单项的样式。

Specifying explicitly, without binding a collection you can add sub menus by nesting them.明确指定,无需绑定集合,您可以通过嵌套来添加子菜单。

A MenuItem can have other MenuItem elements within it as child/sub menus and can go up to several levels. MenuItem 可以在其中包含其他 MenuItem 元素作为子/子菜单,并且可以上升到多个级别。 The following code adds three children menu items to first menu item.以下代码将三个子菜单项添加到第一个菜单项。

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM