Изменение цвета фона всего столбца WPF DataGrid в RunTime

Все, я относительно новичок в WPF. Я искал для ответа на этот вопрос, но все, что я нашел, - это то, как делать строки яркости во время выполнения без столбцов; например, следующие вопросы:

et al.

Я видел свойство CellStyle на страницах MSDN DataGrid, но его использование для меня совершенно не очевидно, несмотря на поиск вокруг этого также.

как изменить цвет фона для всего столбца во время выполнения?

Спасибо за ваше время.

Ответы

Ответ 1

Единственный способ, с помощью которого я работал, - установить столбцы самостоятельно (не используя AutoGenerate). Итак, первое, что нужно сделать, это определить столбцы:

<DataGrid x:Name="Frid" ItemsSource="{Binding Path=.}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="First Name" 
                                Binding="{Binding Path=FirstName}">

            </DataGridTextColumn>

            <DataGridTextColumn Header="Last Name" 
                                Binding="{Binding Path=LastName}">

            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid> 

Затем вам нужно установить каждый столбец CellStyle и привязать фон к статическому ресурсу, который вы можете объявить в Window.Resources:

<Window x:Class="WpfApplication1.MainWindow" ...>
<Window.Resources>
    <SolidColorBrush x:Key="clBr" Color="White" />
</Window.Resources>
...

Столбцы:

                <DataGridTextColumn Header="First Name" 
                                    Binding="{Binding Path=FirstName}">
                <DataGridTextColumn.CellStyle>
                    <Style TargetType="DataGridCell">
                        <Setter Property="Background" 
                                Value="{StaticResource clBr}" />
                    </Style>
                </DataGridTextColumn.CellStyle>
            </DataGridTextColumn>

тогда вы можете просто управлять статическим ресурсом с помощью кода или манипуляции с помощью xaml.

Надеюсь, что это поможет.

Ответ 2

Немного устарел, но вот как вы можете сделать это программно (для столбцов AutoGen):

private void dgvMailingList_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    e.Column.CellStyle = new Style(typeof(DataGridCell));
    e.Column.CellStyle.Setters.Add(new Setter(DataGridCell.BackgroundProperty,  new SolidColorBrush(Colors.LightBlue)));
}

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