我有以下复选框
<CheckBox x:Name="checkBox" Content="CheckBox" Width="74"/>
我有一个按钮
<Button Name="TestButton" Content="Test" />
我想为文本块设置“默认”颜色。我通过拥有一个具有以下内容的resourcedictionary来实现这一目标:
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="White"/>
</Style>
问题是,Button应该仍然有一个黑色的Textblock前景,但是在另一个sourcedictionary中我有以下内容,它仍然会变为白色:
<Style TargetType="Button">
<Style.Setters>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border BorderThickness="1,0,0,1" CornerRadius="5" Background="{TemplateBinding Background}">
<ContentPresenter
x:Name="ContentPresenter"
Margin="1"
VerticalAlignment="Center"
HorizontalAlignment="Center"
TextBlock.Foreground="Black"
Opacity="1.0"/>
</Border>
</ControlTemplate/>
<Setter.Value/>
</Setter>
</Style.Setters>
</Style
编辑: ResourceDictionaries在Application.xaml中定义如下:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="TextBlock.xaml"/>
<ResourceDictionary Source="Buttons.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
答案 0 :(得分:1)
您可以通过在TextBlock
中定义另一个样式来尝试在ContentPresenter
本地覆盖默认的Resources
样式:
<ContentPresenter ... >
<ContentPresenter.Resources>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="Black" />
</Style>
</ContentPresenter.Resources>
</ContentPresenter>
但在App.Resources
中设置默认控件文本颜色的更好方法是这样的。 TextElement.Foreground
将在任何给定的单个元素上覆盖此值。
<SolidColorBrush
x:Key="{x:Static SystemColors.ControlTextBrushKey}"
Color="White"
/>
如果您使用该格式并放弃默认的TextBlock
样式,则原始ContentPresenter
应该像您一样工作。