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>
Другие вопросы по тегам