Разделитель контекста с привязкой к данным не поддерживает глобальный стиль разделителя - PullRequest
1 голос
/ 21 июля 2010

У меня есть контекстное меню, привязанное к источнику данных. Для этого контекстного меню у меня есть DataTrigger, чтобы отобразить разделитель, если объект с привязкой к данным имеет значение «True» для свойства Separator. Это работает хорошо, однако, похоже, не подходит мой глобальный стиль для разделителей, которые есть в моем приложении. Новый внешний вид разделителя отличается от остальных в моем меню. Есть ли способ заставить его использовать глобальный стиль?

Ниже приведено определение ContextMenu:

<ContextMenu  
  x:Key="ActionMenu" 
  ItemsSource="{Binding Source={StaticResource ActionMenuSource}}">
      <ContextMenu.ItemContainerStyle> 
          <Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource {x:Type MenuItem}}"> 
          <Style.Triggers> 
              <DataTrigger Binding="{Binding Path=Separator}" Value="true"> 
                  <Setter Property="MenuItem.Template"> 
                      <Setter.Value> 
                          <ControlTemplate TargetType="{x:Type MenuItem}"> 
                              <Separator Style="{DynamicResource {x:Static             
                                         MenuItem.SeparatorStyleKey}}"/> 
                          </ControlTemplate> 
                      </Setter.Value> 
                  </Setter> 
              </DataTrigger> 
          </Style.Triggers> 
      </Style> 
   </ContextMenu.ItemContainerStyle> 
</ContextMenu>

Вот мои глобальные значения для определения Разделителя.

<Style x:Key="{x:Static MenuItem.SeparatorStyleKey}" TargetType="{x:Type Separator}">
  <Setter Property="Template" Value="{DynamicResource tmp_ManhMenuItemSeparator}"/>
</Style>

<ControlTemplate x:Key="tmp_ManhMenuItemSeparator" TargetType="{x:Type Separator}">
  <Rectangle Name="SepRect" StrokeThickness="1" Stroke="White"/>
</ControlTemplate>

1 Ответ

0 голосов
/ 28 июля 2010

Чтобы сделать стиль глобальным, ключ должен быть таким же, как TargetType, что явно не так в вашем примере.Измените свой ключ на «{x: Type Separator}» и посмотрите, подходит ли он вам.Вы также можете объединить два фрагмента вместе, если у вас нет особой необходимости разделять их, например,

<Style x:Key="{x:Type Separator}" TargetType="{x:Type Separator}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type Separator}">
        <Rectangle Name="SepRect" StrokeThickness="1" Stroke="White"/>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

После того, как вы это сделаете, вы, вероятно, сможете сократить первый блок кода.Похоже, вы пытаетесь сделать меню вручную, используя стиль.Если вы делаете его глобальным, вам не нужно это делать, например,

    <ContextMenu x:Key="ActionMenu" ItemsSource="{Binding Source={StaticResource ActionMenuSource}}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...