WPF оптический стиль динамически создаваемого MenuItem-Separator в MVVM - PullRequest
7 голосов
/ 09 сентября 2010

У меня есть 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 ]

15 голосов
/ 09 сентября 2010

Существует стиль, который объявлен в System.Resources с MenuItem.SeparatorStyleKey в качестве ключа.Родительский MenuItem обычно устанавливает стиль для дочерних элементов типа Separator, но так как ваш это MenuItem, он не будет, поэтому вам придется сделать это вручную:

<Separator Style="{StaticResource {x:Static MenuItem.SeparatorStyleKey}}" />

Вы также можете прочитать BeaЗапись в блоге Столльница «Как вставить объекты-разделители в привязанный к данным MenuItem?» для другого подхода.

0 голосов
/ 09 сентября 2010

Попробуйте обернуть Seperator в MenuItem

<ControlTemplate>
  <MenuItem>
    <MenuItem.Header>
      <Separator />
    </MenuItem.Header>
  </MenuItem>
</ControlTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...