Подменю WPF для контекстного меню
Если контекстное меню "жестко закодировано" в 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 имеет подменю Submenu1.
Я сделал свой 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?
1 ответов
вы можете установить MenuItem.ItemsSource
во вложенную коллекцию. Это создаст подменю для любого menuitem. Для этого модель, поддерживающая ваш 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.ItemContainerStyle
и MenuItem.ItemTemplate
стиль ваших submenuitems.