默认文本块样式

时间:2016-10-12 17:33:50

标签: c# wpf xaml checkbox

我有以下复选框

<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>

1 个答案:

答案 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应该像您一样工作。