You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF DataGrid自定义CellStyle后选中行单元格变白问题求助

解决WPF DataGrid自定义CellStyle后选中行内容不可见问题

问题原因

你直接创建的Style没有继承DataGridCell的默认样式,覆盖了系统原本对选中状态的样式处理;同时未显式设置前景色,导致选中时文字变白,和背景色冲突无法查看。

解决方案

方法一:继承默认样式(推荐)

让自定义样式基于DataGridCell的默认样式,保留系统自带的选中、悬停等状态逻辑,再添加你的自定义设置:

// 创建样式时指定基于默认的DataGridCell样式
datagrid.Columns[colIndex].CellStyle = new Style(typeof(DataGridCell)) 
{ 
    BasedOn = (Style)datagrid.FindResource(typeof(DataGridCell)) 
};

// 添加自定义样式设置
datagrid.Columns[colIndex].CellStyle.Setters.Add(new Setter(Control.BackgroundProperty, (SolidColorBrush)new BrushConverter().ConvertFrom(colors[colorIndex])));
datagrid.Columns[colIndex].CellStyle.Setters.Add(new Setter(Control.BorderBrushProperty, (SolidColorBrush)new BrushConverter().ConvertFrom(colors[colorIndex])));
datagrid.Columns[colIndex].CellStyle.Setters.Add(new Setter(TextBlock.FontWeightProperty, FontWeights.Bold));
datagrid.Columns[colIndex].CellStyle.Setters.Add(new Setter(TextBlock.FontSizeProperty, 18.0));
// 显式设置前景色,避免选中时文字变白
datagrid.Columns[colIndex].CellStyle.Setters.Add(new Setter(TextBlock.ForegroundProperty, Brushes.Black));
datagrid.Columns[colIndex].IsReadOnly = true;

方法二:手动添加选中状态触发器

如果需要完全自定义选中状态的样式,可手动添加触发器指定选中时的背景和前景:

var cellStyle = new Style(typeof(DataGridCell));

// 基础样式设置
cellStyle.Setters.Add(new Setter(Control.BackgroundProperty, (SolidColorBrush)new BrushConverter().ConvertFrom(colors[colorIndex])));
cellStyle.Setters.Add(new Setter(Control.BorderBrushProperty, (SolidColorBrush)new BrushConverter().ConvertFrom(colors[colorIndex])));
cellStyle.Setters.Add(new Setter(TextBlock.FontWeightProperty, FontWeights.Bold));
cellStyle.Setters.Add(new Setter(TextBlock.FontSizeProperty, 18.0));
cellStyle.Setters.Add(new Setter(TextBlock.ForegroundProperty, Brushes.Black));

// 添加选中状态触发器
var isSelectedTrigger = new Trigger
{
    Property = DataGridCell.IsSelectedProperty,
    Value = true
};
// 选中时的背景(可替换为你想要的颜色)
isSelectedTrigger.Setters.Add(new Setter(Control.BackgroundProperty, SystemColors.HighlightBrush));
// 选中时的前景色,确保文字清晰可见
isSelectedTrigger.Setters.Add(new Setter(TextBlock.ForegroundProperty, SystemColors.HighlightTextBrush));

cellStyle.Triggers.Add(isSelectedTrigger);

datagrid.Columns[colIndex].CellStyle = cellStyle;
datagrid.Columns[colIndex].IsReadOnly = true;

内容的提问来源于stack exchange,提问作者Berni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 02:25:27