如何更改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的可视化树并删除样式。
您可以根据您的第一个和重置背景属性添加第二个样式。
<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}"/>
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>
我试过使用这个作为我的一般问题的替代解决方案,即我希望我的应用程序中的所有文本(默认情况下)都是特定的颜色和大小。 它几乎奏效,但我无法找到控制独立TextBlocks颜色的系统画笔。有什么建议么? – Nathanael 2011-05-16 19:32:10
如果你想在这里刷其他刷子,你可以看看这个 - http://msdn.microsoft.com/en-us/library/system.windows.systemcolors.aspx?ppud=4 – 2011-05-16 19:57:32
没错。当我正在试验这个时,我评论了这种风格。我确实为SystemColors.ControlTextBrushKey设置了一个值,但是这并没有改变TextBlock中文本的颜色......我对此感到惊讶。 – Nathanael 2011-05-16 20:03:41
也许我应该更清楚一点。我确实希望将此样式应用于ComboBox内的TextBlock。我需要做的是增加这种风格,或者在ComboBox上做一些工作,以便在ComboBox中选择它们时更改TextBlock项目的颜色。 – Nathanael 2011-05-13 18:48:29