默认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.Resources
和ItemContainerStyle
无法让它发挥作用。 ItemContainerStyle
在运行时抛出TargetInvocationException
(来自NullReferenceException
)
什么时候它应该是一个通用的解决方案,比如FindChildControl?!
答案 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>