【问题标题】:Changing DataGridCell foreground without affecting Selected and Focused base look在不影响 Selected 和 Focused 基本外观的情况下更改 DataGridCell 前景
【发布时间】:2020-05-13 14:23:30
【问题描述】:

我为格式化数字创建了以下样式:

       <Style x:Key="NumericCellStyle" TargetType="DataGridCell">
            <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Content.Text, Converter={StaticResource NegativesToRedConverter}}"/>
            <Setter Property="TextBlock.TextAlignment" Value="Right"/>
            <Setter Property="ContentStringFormat" Value="N2"/>
        </Style>

它实现了文本右对齐、格式为“N2”且负数的前景色为红色的外观。

但是,当我的DataGrid 中的一行被选中时,背景变为蓝色,前景变为白色,但我应用自定义样式的列除外。那里保持红色。红色与蓝色对眼睛很不利,所以我希望它在被选为其他未设置样式的单元格时变成白色。

我尝试通过在我的样式中添加触发器来解决这个问题:

<Style.Triggers>
   <Trigger Property="IsSelected" Value="True">
      <Setter Property="Foreground" Value="White" />
    </Trigger>
</Style.Triggers>

这可以解决问题,但是!当窗口处于非活动状态时,选定的行背景变为灰色,但前景保持白色,看起来很奇怪。

我寻找一种方法来读取此 DataGrid 所在的 UserControl 的焦点状态,但我没有运气。哦 WPF 向导,我该如何解决这个问题?

提前致谢:)

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    您可以覆盖 InactiveSelection 的颜色以使其看起来相同。

    <DataGrid>
        <DataGrid.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="{DynamicResource {x:Static SystemColors.HighlightColorKey}}"/>
            <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="{DynamicResource {x:Static SystemColors.HighlightTextColorKey}}"/>
        </DataGrid.Resources>
    </DataGrid>
    

    【讨论】:

    • 不是一个坏主意,但我认为我找到了更好的解决方案。请看下文。
    【解决方案2】:

    我找到了答案。我不总是应用样式,而是只在未选择单元格时应用它。它基本上只是一个反向触发器:

    <Style x:Key="NumericCellStyle" TargetType="DataGridCell">
        <Setter Property="TextBlock.TextAlignment" Value="Right"/>
        <Setter Property="ContentStringFormat" Value="N2"/>
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="False">
                <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Content.Text, Converter={StaticResource NegativesToRedConverter}}"/>
            </Trigger>
        </Style.Triggers>
    </Style>
    

    感谢所有试图提供帮助的人!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      相关资源
      最近更新 更多