WPF оптический стиль динамически создаваемого MenuItem-Separator в MVVM
У меня есть MenuItem
который создает свои подменю динамически из ItemsSource
-имущество.
Для группировки у меня есть разделители в меню. Разделитель создается для каждой нулевой записи в коллекции ItemsSource с помощью ControlTemplate элемента MenuItem.ItemContainerStyle
,
Это прекрасно работает, однако имеет разделитель не тот же оптический стиль, как другие разделители, которые размещены в коллекции элементов меню.
Есть ли способ изменить внешний вид разделителя так, чтобы он выглядел равным "обычным" пунктам меню-разделителям?
Вот код, который я использую:
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Title}"/>
<Setter Property="Command" Value="{Binding Command}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding }" Value="{x:Null}">
<Setter Property="Template" >
<Setter.Value>
<ControlTemplate>
<Separator /> <!-- THIS SEPARATOR IS NOT SHOWN AS COMMON MENUITEM-SEPARATORS ARE -->
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</MenuItem.ItemContainerStyle>
2 ответа
Существует стиль, который объявлен в System.Resources с помощью MenuItem.SeparatorStyleKey в качестве ключа. Родительский MenuItem обычно устанавливает стиль для дочерних элементов типа Separator, но, поскольку у вас есть MenuItem, он не будет, поэтому вам придется сделать это вручную:
<Separator Style="{StaticResource {x:Static MenuItem.SeparatorStyleKey}}" />
Вы также можете прочитать запись в блоге Bea Stollnitz "Как мне вставить объекты-разделители в привязанный к данным MenuItem?" для другого подхода.
Попробуйте обернуть Seperator в MenuItem
<ControlTemplate>
<MenuItem>
<MenuItem.Header>
<Separator />
</MenuItem.Header>
</MenuItem>
</ControlTemplate>