【发布时间】: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?
感谢您的帮助。
【问题讨论】: