c# - CodeBehind 中 DataGrid 列的元素样式无效
问题描述
我正在使用 MultiConverter 在后面的代码中设置列的元素样式。即使正在访问转换器并且完全没有错误,单元格的背景也没有得到更新。
private void DgBinding(DataTable dt)
{
string prevCol = "";
foreach (DataColumn dc in dt.Columns)
{
if (dc.ColumnName.StartsWith("Delta"))
{
prevCol = dc.ColumnName;
continue;
}
DataGridTextColumn col = new DataGridTextColumn
{
Header = dc.ColumnName,
Binding = new Binding(dc.ColumnName)
};
this.dgTarget.Columns.Add(col);
if (!string.IsNullOrEmpty(prevCol) && prevCol.StartsWith("Delta"))
{
MultiBinding m = new MultiBinding {Converter = new TimeSeriesColorConverter()};
m.Bindings.Add(new Binding(dc.ColumnName));
m.Bindings.Add(new Binding(prevCol));
Style style = new Style();
style.TargetType = typeof(TextBlock);
Setter setter = new Setter
{
Property = BackgroundProperty,
Value = m
};
style.Setters.Add(setter);
col.ElementStyle = style;
}
prevCol = dc.ColumnName;
}
}
如果我只是使用,col.CellStyle
它可以工作并且背景正在更新,但ElementStyle
根本没有任何效果。知道为什么吗?
我不能使用 XAML,因为数据是动态时间序列并且列数未知。
解决方案
您正在使用TargetType
asTextBlock
但在 setter 中设置属性时,您指的是 DataGridCell 的BackgroundProperty
. 当 elemesntstyle 查找 TextBlock 更改时,它什么也没找到,也没有发生任何更改。
至于 CellStyle,Setter 也是出于同样的原因。
将您的代码更改为:
Setter setter = new Setter
{
Property = TextBlock.BackgroundProperty,
Value = m
};
推荐阅读
- python - 如何在不恢复图形的情况下从 tensorflow 检查点提取权重和其他变量值?
- datepicker - 未捕获的错误:模块“AppModule”导入的意外指令“MatFormField”。请添加@NgModule 注释
- spring-boot - Spring Boot 无法从 cmd 找到可执行 jar 中的 ftl 文件
- php - 设置字段中的字符长度
- python - “utf-8”编解码器无法解码位置 1 中的字节 0xc0
- c# - 在水晶报表中,有时数据的参数与所选参数不同
- powershell - 从第 2 行开始的 Powershell 排序
- unity3d - Android 上的 Unity 3d 滑块值重置为最小值
- gcc - 不支持地址清理程序选项“-fsanitize-recover=address”
- javascript - MaterializeCSS轮播设置起始图片无效果