wpf datagrid редактирует стиль ячейки программно - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь отредактировать каждую конкретную ячейку сетки данных в соответствии со столбцом и значением ячейки.И я не могу найти способ сделать это программно, есть несколько примеров в xaml.Также стиль, который я хочу, зависит от значения каждой ячейки.

У меня есть

DataGrid dataGrid = new DataGrid();
        dataGrid.AutoGenerateColumns = false;
        List<string> headers = new List<string>{"voltage", "number"};

        foreach (var header in headers)
        {
            var dataGridColumn = new DataGridTextColumn();
            dataGridColumn.Header = header;
            dataGridColumn.Binding = new Binding(header);
            dataGrid.Columns.Add(dataGridColumn);
        }

, столбцы привязаны к классу, и я могу заполнить сетку данных таким образом, однако я не могу найти способ стилизации каждой ячейки.

1 Ответ

0 голосов
/ 27 ноября 2018

Хорошо, было нелегко найти решение, для простой вещи это определенно сложный способ сделать это.

Итак, для столбца я хочу установить «стиль», создав стиль типа типа ячейки, как этот.

var cellStyle = new Style()
{
    TargetType = typeof(DataGridCell)
};

хитрость заключается в том, чтобы добавить установщик для свойства, которое вы хотите, с привязкой в ​​качестве значения, и эта привязка имеет преобразователь, подобный этому.В этом случае я хочу изменить цвет шрифта с помощью DataGridCell.ForegroundProperty.

cellStyle.Setters.Add(new Setter(DataGridCell.ForegroundProperty, new Binding() { Converter = new CodeStyleConverter() }));
dataGrid.Columns[dataGrid.Columns.Count - 1].CellStyle = cellStyle;

Преобразователь - это объект, который является IValueConverter, который получает значение и возвращает объект для свойства, подобного этому.

public class CodeStyleConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        DataGridRow row;
        if (value is DataGridRow)
        {
            row = value as DataGridRow;
            if (row.Code == "I")
            {
                return Brushes.Red;
            }
            else if (row.Code == "E")
            {
                return Brushes.Blue;
            }
        }
        return Brushes.Black;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return null;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...