DataGrid Zeilen färben

  • WPF
  • .NET 5–6

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Haudruferzappeltnoch.

    DataGrid Zeilen färben

    Hallo,

    habe ein DataGrid ohne Background, ohne RowBackground und ohne AlternatingRowBackground

    Die Klasse die eine Zeile, ausmacht hat eine SolidColorBrush-Property, welche auf den DataGridRow.Background gebunden ist.

    XML-Quellcode

    1. <DataGrid.RowStyle>
    2. <Style TargetType="{x:Type DataGridRow}">
    3. <Setter Property="Background" Value="{Binding Markierung}"/>
    4. </Style>
    5. </DataGrid.RowStyle>


    Eine Zeile bleibt jedoch immer in dem Grauton, der glaub ich der Standard für Controls ist, bis man die Zeile selektiert und deselektiert, danach korrekt gefärbt. Bei jeder Aktualisierung (Sort, Filter) wird die Zeile jedoch wieder grau.

    Jemand ne Ahnung was da hakt?

    Viele Grüße
    Weder True noch False helfen da, leider; es wird aber auch nichts selektiert.
    Das komische ist es ist je nachdem wie ich hin und her sortiere auch immer ne andere Zeile.
    Es ist immer die Zeile, die vor der Aktualisierung selektiert war. Die ist dann ja eigentlich blau. Wenn man das DataGrid verlässt dann wird aus blau dieses grau.
    Ich schätze eine Zeile muss immer selektiert sein?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Ich hab das via DatagridCellStyle gelöst, sollte aber auch mit dem RowStyle gehen.

    XML-Quellcode

    1. <Style x:Key="DataGridCellStyle" TargetType="DataGridCell">
    2. <Setter Property="Background" Value="{StaticResource BackgroundBrushBright}"/>
    3. <Setter Property="Foreground" Value="{StaticResource TextBrushDark}"/>
    4. <Style.Triggers>
    5. <Trigger Property="IsSelected" Value="True">
    6. <Setter Property="Background" Value="{StaticResource BackgroundBrushAccent}"/>
    7. <Setter Property="Foreground" Value="{StaticResource TextBrushBright}"/>
    8. </Trigger>
    9. </Style.Triggers>
    10. </Style>

    XML-Quellcode

    1. <DataGrid>
    2. <DataGrid.CellStyle>
    3. <Style TargetType="DataGridCell" BasedOn="{StaticResource DataGridCellStyle}"/>
    4. <MORE/>
    5. </DataGrid.CellStyle>

    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    Hey mit DataGridCell funktioniert es. In der DataGridRow nimmt er den Trigger schlicht und ergreifend nicht.

    Eine Frage dazu noch:
    Das DataGrid bindet an eine ObservableCollection(Of ClassX), dementsprechend denke ich repräsentiert eine DataGridRow eine Instanz von ClassX.
    Die Eigenschaft der Row an eine Eigenschaft der ClassX zu binden, kann ich dann einigermaßen nachvollziehen, dass eben die Eigenschaft der jeweiligen Instanz abgefragt wird.
    Eine DataGridCell hingegen, hätte ich eher als Repräsentation einer Eigenschaft einer ClassX Instanz gesehen. Wie kann er das korrekt zuordnen?

    XML-Quellcode

    1. <DataGrid.RowStyle>
    2. <Style TargetType="{x:Type DataGridRow}">
    3. <Setter Property="Background" Value="{Binding Markierung}"/>
    4. </Style>
    5. </DataGrid.RowStyle>
    6. <!--versus -->
    7. <DataGrid.CellStyle>
    8. <Style TargetType="{x:Type DataGridCell}">
    9. <Setter Property="Background" Value="{Binding Markierung}"/>
    10. </Style>
    11. </DataGrid.CellStyle>

    wobei Pseudo-Code mäßig gedacht:
    DataGridRow = DataGrid.ItemsSource(i)
    und DataGridRow.BackGround = DataGrid.ItemsSource(i).Markierung

    Aber DataGridCell = DataGrid.ItemsSource(i).PropertyForColumn1
    und DataGridCell.Background = DataGrid.ItemsSource(i).PropertyForColumn1.Markierung

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()