如何更改WPF ComboBox中所选文本的颜色?

时间:2011-05-13 18:37:24

标签: c# wpf

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

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

该样式是在我的应用程序的最高级别有意定义的,因此默认情况下它适用于所有TextBlock。

问题是这种风格打破了ComboBoxes中TextBlocks的行为。通常,ComboBox中的选定项目的前景颜色更改为白色。但是,应用此样式后,文本的前景色不会改变。

如果突出显示ComboBox中的TextBlock,如何触发文本更改颜色?

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我通过将样式从app.xaml移出并放入一个单独的资源字典中解决了这个问题,我在应用程序Window&amp;页。

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

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

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

答案 2 :(得分:0)

您是否尝试过将不同的文本样式添加到ComboBox.Resources或者包含ComboBox的控件?这会覆盖你在更高级别设置的风格。

另一种方法是在加载时移动ComboBox的可视树并删除样式。

答案 3 :(得分:0)

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

<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}"/>