[c#] Comment puis-je définir la couleur d'une ligne sélectionnée dans DataGrid



2 Answers

Je l'ai. Ajoutez ce qui suit dans la section DataGrid.Resources:

  <DataGrid.Resources>
     <Style TargetType="{x:Type dg:DataGridCell}">
        <Style.Triggers>
            <Trigger Property="dg:DataGridCell.IsSelected" Value="True">
                <Setter Property="Background" Value="#CCDAFF" />
            </Trigger>
        </Style.Triggers>
    </Style>
</DataGrid.Resources>
Question

Cela semble être une évidence, mais je ne peux pas voir comment le faire.

La couleur d'arrière-plan par défaut d'une ligne sélectionnée dans DataGrid est si sombre que je ne peux pas la lire. Y a-t-il moyen de l'ignorer?

J'ai essayé ceci (modifié à partir du lien Neverminds)

<dg:DataGrid.RowStyle>
    <Style TargetType="{x:Type dg:DataGridRow}">
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True" >
                <Setter Property="Background" Value="Gainsboro" />
            </Trigger>
        </Style.Triggers>
    </Style>
</dg:DataGrid.RowStyle>

Mais toujours rien ...




Une partie de la raison pour laquelle j'ai vécu l'événement sélectionné en ligne ne fonctionne pas

  1. Le style est configuré pour DataGridCell
  2. Utilisation de colonnes gabarit
  3. Trigger est configuré à DataGridRow

C'est ce qui m'a aidé. Définition du style pour DataGridCell

<Style TargetType="{x:Type DataGridCell}">
  <Style.Triggers>
    <Trigger Property="IsSelected" Value="True">
      <Setter Property="Background" Value="Green"/>
      <Setter Property="Foreground" Value="White"/>
    </Trigger>
  </Style.Triggers> 
</Style>

Et comme j'utilisais une colonne de modèle avec une étiquette à l'intérieur, j'ai lié la propriété Foreground au conteneur Foreground en utilisant la liaison RelativeSource:

<DataGridTemplateColumn>
  <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
      <Label Content="{Binding CategoryName,
                 Mode=TwoWay,
                 UpdateSourceTrigger=LostFocus}"
             Foreground="{Binding Foreground,
                 RelativeSource={RelativeSource Mode=FindAncestor,
                     AncestorLevel=1, 
                     AncestorType={x:Type DataGridCell}}}"
             Width="150"/>
    </DataTemplate>
  </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>



J'ai eu ce problème et j'ai presque arraché mes cheveux, et je n'ai pas été capable de trouver la réponse appropriée sur le net. J'essayais de contrôler la couleur d'arrière-plan de la ligne sélectionnée dans un DataGrid WPF. Ça ne le ferait tout simplement pas. Dans mon cas, la raison en était que j'avais aussi un CellStyle dans ma grille de données, et que le CellStyle avait priorité sur le RowStyle que je définissais. Chose intéressante, car le CellStyle ne définissait même pas la couleur d'arrière-plan, qui était plutôt définie par les propriétés RowBackground et AlternateRowBackground. Néanmoins, essayer de définir la couleur d'arrière-plan de la ligne sélectionnée ne fonctionnait pas du tout quand je l'ai fait:

        <DataGrid ... >
        <DataGrid.RowBackground>
            ...
        </DataGrid.RowBackground>
        <DataGrid.AlternatingRowBackground>
            ...
        </DataGrid.AlternatingRowBackground>
        <DataGrid.RowStyle>
            <Style TargetType="{x:Type DataGridRow}">
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Background" Value="Pink"/>
                        <Setter Property="Foreground" Value="White"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>
        <DataGrid.CellStyle>
            <Style TargetType="{x:Type DataGridCell}">
                <Setter Property="Foreground" Value="{Binding MyProperty}" />
            </Style>
        </DataGrid.CellStyle>

et cela a fonctionné lorsque j'ai déplacé le style souhaité pour la ligne sélectionnée du style de ligne et dans le style de cellule, comme ceci:

    <DataGrid ... >
        <DataGrid.RowBackground>
            ...
        </DataGrid.RowBackground>
        <DataGrid.AlternatingRowBackground>
            ...
        </DataGrid.AlternatingRowBackground>
        <DataGrid.CellStyle>
            <Style TargetType="{x:Type DataGridCell}">
                <Setter Property="Foreground" Value="{Binding MyProperty}" />
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Background" Value="Pink"/>
                        <Setter Property="Foreground" Value="White"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </DataGrid.CellStyle>

Juste poster ceci au cas où quelqu'un a le même problème.




Related