web-dev-qa-db-fra.com

Modifier la couleur d'arrière-plan de la colonne entière de WPF DataGrid lors de l'exécution

Tout, je suis relativement nouveau à WPF. J'ai cherché la réponse à cette question, mais tout ce que j'ai trouvé est de savoir comment coloriser les lignes au moment de l'exécution et non les colonnes; par exemple les questions suivantes:

  1. Changer la couleur des lignes de la grille de données WPF

  2. Comment puis-je modifier par programme la couleur des lignes de la grille de données dans WPF?

  3. attribution par programme d'une couleur à une ligne dans DataGrid

  4. Changer la couleur des cellules DataGrid en fonction des valeurs

et al.

J'ai vu la propriété CellStyle sur les pages MSDN DataGrid mais son utilisation n'est pas du tout évidente pour moi malgré les recherches autour de cela aussi.

comment changer la couleur d'arrière-plan d'une colonne entière lors de l'exécution?

Merci pour votre temps.

23
MoonKnight

La seule façon de le faire fonctionner est de définir les colonnes par moi-même (en n'utilisant pas AutoGenerate). La première chose à faire est donc de définir les colonnes:

<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> 

Ensuite, vous devez définir chaque colonne CellStyle et lier l'arrière-plan à une ressource statique que vous pouvez déclarer dans Window.Resources:

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

Colonnes:

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

alors vous pouvez simplement manipuler la ressource statique par manipulation de code ou xaml.

J'espère que ça aide.

25
Matan Shahar

Un peu vieux, mais voici comment procéder par programmation (pour les colonnes 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)));
}

La même approche peut également être appliquée aux colonnes non AutoGen.

15
dotNET