我可以在默认样式中覆盖/替换子项的属性

时间:2013-10-04 15:49:57

标签: wpf styles

默认wpf MenuItem (在菜单上)是由控件约构建的。像这样:
网格;外矩形; BG-矩形;内的矩形;的 DockPanel中;弹出窗口。

dockpanel 又包含:
contentpresenter [ICON];路径;的 contentpresenter [文本]

contentpresenter [text] TextBlock控件组成。

我想要实现的是尽可能简单地定义Style来更改此VerticalAlignment的{​​{1}}属性,但仅限于TextBlock in TextBlock MenuItem,不是一般的。

<Style x:Key ="TextBlockCenterStyle" TargetType="{x:Type TextBlock}">
        <Setter Property="VerticalAlignment" Value="Center" />
    </Style>

<Style TargetType="MenuItem">
        <Setter Property="FontSize" Value="11" />
        <Setter Property="ItemContainerStyle" Value="TextBlockCenterStyle" />
        <Style.Resources>
            <Style TargetType="{x:Type TextBlock}">
                <Setter Property="VerticalAlignment" Value="Center" />
            </Style>
      </Style.Resources>
</Style>

我尝试了Style.ResourcesItemContainerStyle 无法让它发挥作用。 ItemContainerStyle在运行时抛出TargetInvocationException(来自NullReferenceException) 什么时候它应该是一个通用的解决方案,比如FindChildControl?!

1 个答案:

答案 0 :(得分:0)

您是否尝试过ItemContainerStyle?

类似的东西:

 <MenuItem ItemContainerStyle = {StaticResource MyItemContainerStyle}../>

然后MyItemContainerStyle有你的

 <Style x:Key ="MyItemContainerStyle" TargetType="{x:Type TextBlock}">
                <Setter Property="VerticalAlignment" Value="Center" />
            </Style>

===============编辑后====================== 试试这个:

<Style TargetType="MenuItem">
        <Setter Property="FontSize" Value="11" />
        <Setter Property="ItemContainerStyle" Value="{StaticResource TextBlockCenterStyle}" />
        <Style.Resources>
            <Style TargetType="{x:Type TextBlock}">
                <Setter Property="VerticalAlignment" Value="Center" />
            </Style>
      </Style.Resources>
</Style>