【问题标题】:Make datagrid selected row text colour transparent?使datagrid选定的行文本颜色透明?
【发布时间】:2015-02-15 15:05:51
【问题描述】:

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

颜色是根据使用以下方法的字典在 OnLoadingRow 事件中根据名为 ForeColorFlag 或 BackColorFlag 的绑定对象上的属性添加的(类似于 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 会使文本不可读。

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

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

感谢您的帮助。

【问题讨论】:

    标签: c# wpf datagrid triggers


    【解决方案1】:

    将以下样式添加到您的应用程序资源或 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>
    

    您是在告诉它将前景色设置为原来的颜色,我想这很棒。

    【讨论】:

      【解决方案2】:

      将此样式添加到应用程序的资源中或任何需要的地方:

       <Style TargetType="{x:Type DataGridCell}">
            <Style.Triggers>
                <Trigger Property="DataGridCell.IsSelected" Value="True">
                    <Setter Property="Background" Value="Transparent" />
                </Trigger>
            </Style.Triggers>
        </Style>
      

      【讨论】:

      • 这不会在选择前景属性(文本颜色)时强制为黑色吗?我需要它不改变底层文本颜色!底层文本颜色可以是红色或灰色,我不希望它在被选中时变黑。
      • 那么你可以根据你的主题来获取动态资源的帮助......就像 ... 我建议你研究这个.. .msdn.microsoft.com/en-us/library/ms748942(v=vs.110).aspx
      • 前景色因行而异。必须有一种更简单的方法来设置 Selected text color 不覆盖底层颜色。
      • 前景色(文本颜色)默认为白色(我只是仔细检查了这个)。默认选择样式为蓝色背景,白色文本。 I need some way to not overwrite the underlying text colour (forecolor) style when a row is selected.
      猜你喜欢
      • 1970-01-01
      • 2021-06-05
      • 1970-01-01
      • 2014-02-18
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 2011-05-05
      • 2014-01-14
      相关资源
      最近更新 更多