有没有办法阻止ItemContainerStyle重写已经设置的样式(例如通过<Style TargetType="{x:Type MenuItem}">
)?
MenuItem
的样式已在ResourceDictionary
XAML文件中定义,该文件在App启动时加载:
<ResourceDictionary>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Foreground" Value="{DynamicResource TextForeground}"/>
.. and so on
</Style>
</ResourceDictionary>
我有以下MenuItem
XAML定义。 MenuItem
包含在通用ContextMenu
的{{1}}内(我估计值得一提)。一切顺利的菜单本身,但其子(Enum的实际值)得到一个不同的风格,因为TextBlock
覆盖它:
ItemContainerStyle
ItemContainerStyle源于another question of mine。
MenuItem位于其他图层中,顶层是自定义ContentControl:
<MenuItem Header="DisplayType"
Name="DisplayTypeMenu"
ItemsSource="{Binding Source={StaticResource DisplayTypeValues}}">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="MenuItem.IsCheckable" Value="True" />
<Style.Triggers>
<Trigger Property="MenuItem.Header"
Value="{x:Static enums:DisplayType.Description}" >
<Setter Property="MenuItem.IsChecked" Value="True" />
</Trigger>
</Style.Triggers>
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
上面的代码似乎是问题根源的一个很好的候选者!?
因此,完整的结构是:
public class SomeGradientPanel : ContentControl
{
public SomeGradientPanel ()
{
DefaultStyleKey = typeof(SomeGradientPanel );
}
}
我可以在<SomeNameSpace:SomeGradientPanel>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="40"></RowDefinition>
<RowDefinition Height="20"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock x:Name="SomeLabel">
<TextBlock.ContextMenu>
<ContextMenu>
<!-- The MenuItem code snippet from above !-->
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</Grid>
</SomeNameSpace:SomeGradientPanel>
中引用Style
已经定义的MenuItem
吗?样式覆盖仅发生在所述ItemContainerStyle
的子项上,父项具有预期的样式。
感谢您的投入!
答案 0 :(得分:10)
你试过吗
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem" BasedOn="{StaticResource {x:Type MenuItem}}">