c# - 使数据网格所选行文本颜色透明?

标签 c# wpf datagrid triggers

数据网格应用程序中的每一行都可以有各种背景和前景(文本)颜色。

根据使用以下内容的字典,根据 OnLoadingRow 事件中名为 ForeColorFlag 或 BackColorFlag 的绑定(bind)对象上的属性添加颜色(与 BackColorFlag 类似):

foreach (var kvp in _foreColorFlags)
{
    var trigger = new DataTrigger {Binding = new Binding("ForeColorFlag"), Value = kvp.Key};
    var setter = new Setter(ForegroundProperty, kvp.Value);
    trigger.Setters.Add(setter);
    rowStyle.Triggers.Add(trigger);
}

因此,有必要使用以下方法隐藏选择的行:

// Remove selection style from DGV (make transparent instead of blue)
rowStyle.Resources[SystemColors.HighlightBrushKey] = Brushes.Transparent;
rowStyle.Resources[SystemColors.ControlBrushKey] = Brushes.Transparent;
rowStyle.Resources[SystemColors.HighlightTextBrushKey] = Brushes.LightGray;
rowStyle.Resources[SystemColors.ControlTextBrushKey] = Brushes.LightGray;

// stop backcolor going grey when window doesn't have focus.
rowStyle.Resources[SystemColors.InactiveSelectionHighlightBrushKey] = Brushes.Transparent;
rowStyle.Resources[SystemColors.InactiveSelectionHighlightTextBrushKey] = Brushes.LightGray;

这意味着当选择一行时,其背景颜色就是未选择时的背景颜色。但是,不幸的是,文本颜色(前景色)被迫为 LightGray,将其设置为 Brushes.Transparent 会使文本不可读。

有没有办法动态设置所选文本颜色(前景色)(基于绑定(bind)属性)?

或者有更好的方法吗?是否可以使用带有 PropertyTrigger(如 IsSelected)和 DataTrigger(在我们的 ForeColorFlag 上)的 MultiTrigger?

感谢您的帮助。

最佳答案

将以下样式添加到您的应用程序资源或 DataGrid 的资源中:

    <Style TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource {x:Type DataGridCell}}">
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource Self}, Path=Foreground}" />
            </Trigger>
        </Style.Triggers>
    </Style>

你告诉它把前景色设置为它已经是的颜色,我认为这很棒。

关于c# - 使数据网格所选行文本颜色透明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27519283/

相关文章:

c# - 在不使用 BigInt 的情况下计算 2^1000 的总和

c# - 是否可以在空数据网格中显示消息

c# - 双击时停止单元格进入编辑模式

c# - 如何开始制作 C# RSS 阅读器?

c# - 将字符串数组从 ajax 传递到 C# Web 方法

c# - ObservableCollection 不更新 View

c# - 当我单击 ListBoxItem 时,如何使 StackPanel 滑到一边

wpf - 问题数据绑定(bind)到 UserControl 上的 DependencyProperty

WPF DataGrid 绑定(bind)到 string.Length 而不是字符串文本

c# - .NET 中的 Unicode 版本