Стиль элемента столбца DataGrid в CodeBehind не имеет никакого эффекта - PullRequest
0 голосов
/ 28 декабря 2018

Я устанавливаю стиль элемента колонки в коде, используя 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, поскольку данные являются динамическими временными рядами, а число столбцов неизвестно.

1 Ответ

0 голосов
/ 28 декабря 2018

Вы используете TargetType в качестве TextBlock, но при установке свойства внутри сеттера вы ссылаетесь на DataGridCell's BackgroundProperty.Когда elemesntstyle ищет изменения TextBlock, он ничего не находит и никаких изменений не происходит.

Что касается CellStyle, Setter работает по той же причине.

Измените свой код на это:

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