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

问题描述:

在我的应用程序中,我为TextBlocks定义了以下样式。如何更改WPF组合框中选定文本的颜色?

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

样式是在我的应用程序的*别有意定义的,所以它默认适用于所有TextBlocks。

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

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

我解决了这个问题并根据需要放入我的应用程序窗口&页面中的单独资源字典中。

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

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

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

您是否曾尝试向ComboBox.Resources或包含ComboBox的控件添加不同的文本样式?这将覆盖您在更高级别设置的样式。

这样做的另一种方法是在载入时遍历ComboBox的可视化树并删除样式。

+0

也许我应该更清楚一点。我确实希望将此样式应用于ComboBox内的TextBlock。我需要做的是增加这种风格,或者在ComboBox上做一些工作,以便在ComboBox中选择它们时更改TextBlock项目的颜色。 – Nathanael 2011-05-13 18:48:29

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

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

TextBlocks出现在ComboBox内部,它们在我的标记中没有显式声明。 – Nathanael 2011-05-16 19:26:50

如果你只是想改变texblock前景选定的项目(比如红色),只需添加到您的样式资源:通过移动方式进行的app.xaml

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

我试过使用这个作为我的一般问题的替代解决方案,即我希望我的应用程序中的所有文本(默认情况下)都是特定的颜色和大小。 它几乎奏效,但我无法找到控制独立TextBlocks颜色的系统画笔。有什么建议么? – Nathanael 2011-05-16 19:32:10

+0

如果你想在这里刷其他刷子,你可以看看这个 - http://msdn.microsoft.com/en-us/library/system.windows.systemcolors.aspx?ppud=4 – 2011-05-16 19:57:32

+0

没错。当我正在试验这个时,我评论了这种风格。我确实为SystemColors.ControlTextBrushKey设置了一个值,但是这并没有改变TextBlock中文本的颜色......我对此感到惊讶。 – Nathanael 2011-05-16 20:03:41