如果上下文菜单在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元素?
答案 0 :(得分:12)
您可以将MenuItem.ItemsSource
设置为嵌套集合。这将为任何menuitem生成子菜单。为此,支持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>
同样,您可以设置MenuItem.ItemContainerStyle
和MenuItem.ItemTemplate
来设置子菜单的样式。
答案 1 :(得分:0)
明确指定,而无需绑定集合,您可以通过嵌套子菜单来添加子菜单。
一个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/