[C#] Come posso impostare il colore di una riga selezionata in DataGrid


Answers

Fatto. Aggiungi il seguente all'interno della sezione 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

Questo sembra un gioco da ragazzi, ma non riesco a vedere come farlo.

Il colore di sfondo predefinito di una riga selezionata in DataGrid è talmente scuro che non riesco a leggerlo. Esiste comunque la possibilità di annullarlo?

Ho provato questo (modificato dal link di 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>

Ma ancora niente ...




Alcune delle ragioni per cui ho riscontrato che l'evento selezionato di riga non funzionava

  1. Lo stile è impostato per DataGridCell
  2. Utilizzando le colonne Templated
  3. Trigger è impostato su DataGridRow

Questo è quello che mi ha aiutato. Impostazione dello stile per 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>

E poiché stavo usando una colonna template con un'etichetta all'interno, ho associato la proprietà Foreground al contenitore in primo piano usando il binding 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>



Ho avuto questo problema e ho quasi strappato i capelli, e non sono stato in grado di trovare la risposta appropriata in rete. Stavo cercando di controllare il colore di sfondo della riga selezionata in un DataGrid WPF. Semplicemente non lo farebbe. Nel mio caso, il motivo era che avevo anche un CellStyle nel mio datagrid e CellStyle sovrascriveva il RowStyle che stavo impostando. È interessante notare che, in quanto CellStyle non ha nemmeno impostato il colore di sfondo, che era invece impostato da BingBackground e proprietà di AlternateRowBackground. Tuttavia, provare a impostare il colore di sfondo della riga selezionata non ha funzionato affatto quando ho fatto questo:

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

e ha funzionato quando ho spostato lo stile desiderato per la riga selezionata fuori dallo stile della riga e nello stile della cella, in questo modo:

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

Pubblicando questo nel caso qualcuno abbia lo stesso problema.