【发布时间】:2016-02-26 21:29:21
【问题描述】:
我找到了很多针对同一问题的回复,但没有一个可以真正回答我所知道的问题...我正在尝试将我的应用程序的默认 GroupBox 样式中的标题前景设置为与其他内容不同的颜色。考虑以下几点:
<Style TargetType="{x:Type GroupBox}">
<Setter Property="FontSize" Value="18"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupBox}">
<ContentPresenter TextElement.Foreground="Green" Content="{TemplateBinding Header}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
现在,如果我将 GroupBox 上的标题设置为像这样的字符串,则字体正确为绿色:
<Grid>
<GroupBox Header="Header Text"/>
</Grid>
但是,如果我将其更改为标题是控件,则不会应用样式中的字体颜色:
<Grid>
<GroupBox>
<GroupBox.Header>
<TextBlock Text="Header Text"/>
</GroupBox.Header>
</GroupBox>
</Grid>
据我了解,这是因为 ContentPresenter 在第一个示例中只有一个字符串,因此它正在创建 TextBlock 本身,因此是它在可视化树中的父级,而在第二个示例中是内容首先创建,然后插入 ContentPresenter 本来应该存在的位置。
所以我知道为什么会发生这种情况......但我一直无法找到一个好的解决方法。在其他示例中,我看到人们通常最终显式模板化内容,但这只是我的应用程序的默认样式,因此我没有内容可以显式设置任何内容。
【问题讨论】:
-
可以设置默认颜色,但适用于您在 GroupBox 中的所有
TextBlocks,包括GroupBox的内容。可以吗?