我有一个绑定到数据源的上下文菜单。对于此上下文菜单,如果数据绑定对象的Separator属性值为“True”,则我有一个DataTrigger来显示分隔符。这很好用,但它似乎没有为我的应用程序中的分隔符选择我的全局样式。新的分隔符外观与我的菜单的其余部分不同。有没有办法让它使用全球风格?
以下是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>
答案 0 :(得分:0)
要使样式成为全局样式,键必须与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}}"/>