默认的 wpf 菜单项(在菜单上)是由控件构造的,大约如下所示:
网 格;外矩形;BG矩形;内矩形;码头面板;弹出。
坞站面板依次包括:
内容演示者[图标];路径;内容演示者[文本]
内容演示器[文本]由一个TextBlock
控件组成。
我想要实现的是定义一个尽可能简单的Style
来更改此TextBlock
的VerticalAlignment
属性,但仅适用于MenuItem
中的TextBlock
,而不是一般。
<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.Resources
和ItemContainerStyle
.
无法让它工作。 ItemContainerStyle
在运行时抛出TargetInvocationException
(从NullReferenceException
)。
如果可能的话,它应该是一个通用的解决方案,比如FindChildControl?!
你试过 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>