如何更改 WPF 组合框中所选文本的颜色

本文关键字:文本 颜色 何更改 WPF 组合 | 更新日期: 2023-09-27 17:56:17

在我的应用程序中,我为 TextBlock 定义了以下样式。

<Style TargetType="{x:Type TextBlock}">
    <Setter Property="FontFamily" Value="Arial"/>
    <Setter Property="FontSize" Value="11"/>
    <Setter Property="Foreground" Value="{StaticResource TextBrush}"/>
    <Setter Property="Opacity" Value="1.0"/>
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="false">
            <Setter Property="Opacity" Value="0.40"/>
        </Trigger>
    </Style.Triggers>
</Style>

该样式是有意在我的应用程序的最高级别定义的,以便默认情况下它适用于所有文本块。

问题在于,这种样式破坏了组合框中文本块的行为。通常,组合框中的选定项的前景色会更改为白色。但是,应用此样式后,文本的前景色不会更改。

当组合框中的文本块突出显示时,如何触发文本更改颜色?

如何更改 WPF 组合框中所选文本的颜色

如果您只想更改选定项目的 texblock 前景(例如红色),只需将其添加到您的样式资源中:

<Style.Resources>
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Red"/>
</Style.Resources>

我通过将样式移出app.xaml并移动到一个单独的资源字典中来解决此问题,该字典根据需要包含在我的应用程序 Window & Pages 中。

这会阻止TextBlock样式影响ComboBox中文本的颜色。最后,为了在所有项目上实现我想要的文本颜色,我用自己的颜色覆盖了以下默认系统颜色。

<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}"
                 Color="{StaticResource TextColor}"/>
<SolidColorBrush x:Key="{x:Static SystemColors.WindowTextBrushKey}"
                 Color="{StaticResource TextColor}"/>

您可以根据第一个样式添加第二个样式并重置背景属性。

<Style TargetType="{x:Type TextBlock}">
    <Setter Property="Foreground" Value="{StaticResource TextBrush}"/>
</Style>
<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource {x:Type TextBlock}}" x:Key="ResetBG">
    <Setter Property="Foreground" Value="{Binding Control.Background}"/>
</Style>
<TextBlock Text="Red"/>
<TextBlock Text="Default" Style="{StaticResource ResourceKey=ResetBG}"/>