DataBehind中的DataGrid列的元素样式无效

时间:2018-12-28 16:31:59

标签: c# wpf wpfdatagrid

我在后面使用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,因为数据是动态时间序列,并且列数未知。

1 个答案:

答案 0 :(得分:1)

您将TargetType用作TextBlock,但是在setter中设置属性时,是指DataGridCell的BackgroundProperty。当elemesntstyle寻找TextBlock更改时,它什么也没找到,也没有任何更改。

对于CellStyle,由于相同的原因,Setter也可以工作。

将代码更改为此:

         Setter setter = new Setter
            {
                Property = TextBlock.BackgroundProperty,
                Value = m
            };