我在后面使用MultiConverter在代码中设置列的Element样式。即使正在访问转换器,也没有任何错误,单元格的背景也没有得到更新。
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,因为数据是动态时间序列,并且列数未知。
答案 0 :(得分:1)
您将TargetType
用作TextBlock
,但是在setter中设置属性时,是指DataGridCell的BackgroundProperty
。当elemesntstyle寻找TextBlock更改时,它什么也没找到,也没有任何更改。
对于CellStyle,由于相同的原因,Setter也可以工作。
将代码更改为此:
Setter setter = new Setter
{
Property = TextBlock.BackgroundProperty,
Value = m
};