【问题标题】:How can I change the colour of selected text in a WPF ComboBox?如何更改 WPF ComboBox 中选定文本的颜色?
【发布时间】:2011-05-13 18:37:23
【问题描述】:

在我的应用程序中,我为 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。

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

如何在 ComboBox 中的 TextBlock 高亮显示时触发文本更改颜色?

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

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

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

    【讨论】:

    • 我尝试使用它作为我的一般问题的替代解决方案,即我希望我的应用程序中的所有文本(默认情况下)都是特定的颜色和大小。它几乎可以工作,但我找不到控制独立文本块颜色的系统画笔。有什么建议吗?
    • 如果你想要其他刷子可以看看这个 - msdn.microsoft.com/en-us/library/…
    • 对。当我尝试这个时,我注释掉了这种风格。我确实为 SystemColors.ControlTextBrushKey 设置了一个值,但这并没有改变 TextBlock 中文本的颜色......我对此感到惊讶。
    • 这最终很有帮助!谢谢!
    【解决方案2】:

    我通过将样式从app.xaml 移出并移到单独的资源字典中解决了这个问题,我根据需要将其包含在我的应用程序窗口和页面中。

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

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

    【讨论】:

      【解决方案3】:

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

      <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 内部,它们没有在我的标记中的任何地方显式声明。
      猜你喜欢
      • 2012-04-11
      • 1970-01-01
      • 2013-08-03
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多