0

默认 wpf MenuItem(在菜单上)由大约控制构成。像这样:
网格;外矩形;bg-矩形;内矩形;码头面板;弹出。

停靠面板依次包括:contentpresenter [
icon]; 小路; 内容演示者[文本]

contentpresenter [text]由一个TextBlock控件组成。

我想要实现的是Style尽可能简单地定义 a 来更改VerticalAlignmentthis 的属性TextBlock,但仅限于TextBlockin 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
无法让它工作。ItemContainerStylethrows TargetInvocationException(from NullReferenceException) 在运行时。
如果可能,它应该是一个通用的解决方案,比如 FindChildControl?!

4

1 回答 1

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>
于 2013-10-04T16:01:13.780 回答