Xceed splitbutton с пунктами меню и подменю пунктов
Я пытаюсь открыть выпадающее меню под кнопкой разделения. Некоторые из этих пунктов меню должны иметь пункты подменю. Если вы хотите пример, нажмите на кнопку закладки в Firefox (вверху справа).
Я не могу использовать Меню, потому что оно всегда ориентировано горизонтально. Итак, я пошел со стековой панелью:
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
Title="MainWindow" Height="350" Width="525">
<Grid>
<xctk:SplitButton Content="SplitButton" BorderThickness="1" BorderBrush="Black" Margin="0,0,408,290">
<xctk:SplitButton.DropDownContent>
<StackPanel Width="161" HorizontalAlignment="Left">
<MenuItem Header="MenuItem1" HorizontalAlignment="Left" Width="517">
<MenuItem.Items>
<MenuItem Header="submenuItem1"/>
<MenuItem Header="submenuItem2"/>
</MenuItem.Items>
</MenuItem>
<MenuItem Header="MenuItem2"/>
<MenuItem Header="MenuItem3"/>
</StackPanel>
</xctk:SplitButton.DropDownContent>
</xctk:SplitButton>
</Grid>
Проблема в том, что элементы подменю не отображаются. У них даже нет маленьких стрелочек рядом с ними. Вы можете сделать это без SplitButton, просто оставив панель стека и все в ней, у вас будет та же проблема. Я попытался поместить родительский элемент меню в его собственный тег, но я хочу, чтобы элементы подменю отображались справа от их родителя (точно так же, как пример с firefox: предполагается, что ваше окно firefox не развернуто, и вы разрешили достаточно места на экране для отображения элемента).
1 ответ
Как вы используете MenuItem
контроль неправильный, он предназначен для размещения внутри Menu
контроль или другой MenuItem
,
Что касается решения вашей проблемы, есть два. во-первых, написать пользовательский элемент управления, который использует ContextMenu
чтобы разместить пункты меню, вы напишите что-то вроде этого:
<m:SplitButton Content="Split Button" Placement="Bottom">
<MenuItem Header="MenuItem 1"/>
<MenuItem Header="MenuItem 2">
<MenuItem Header="MenuItem 1"/>
<MenuItem Header="MenuItem 2"/>
</MenuItem>
</m:SplitButton
http://www.codeproject.com/Articles/20612/A-WPF-SplitButton
Второй подход заключается в размещении Menu
контроль внутри DropDownContent
и переделать все, будет много разметки xaml.
Menu
элемент управления будет легко перерисовать, единственное, что вам нужно сделать, это убедиться, что пункты меню отображаются вертикально, а не горизонтально, используя следующую разметку:
<Style TargetType="Menu">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" IsItemsHost="True" />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>
самая сложная часть укладки MenuItems
, они разработаны на основе их Role
имущество. Может иметь четыре возможных значения:
- TopLevelHeader: прямое потомство
Menu
с элементами подменю. - TopLevelItem: прямое потомство
Menu
без пунктов подменю. - Подменю Header: прямой ребенок
MenuItem
с элементами подменю. - Подменю: прямое дитя
MenuItem
без пунктов подменю.
С уважением