I write style, depending on the value in the column the color of the line should change. The style works, but there is a problem: the selected line is not displayed. How can this be solved?

<DataGrid ItemsSource="{Binding RecordVms }"> <DataGrid.RowStyle> <Style TargetType="DataGridRow"> <Style.Triggers> <DataTrigger Binding="{Binding State}" Value="InProgress"> <Setter Property="Background" Value="GreenYellow"></Setter> </DataTrigger> </Style.Triggers> </Style> </DataGrid.RowStyle> </DataGrid> 

Line 3 is now selected on the screen.

enter image description here

    1 answer 1

    As an option, you can take the native style DataGridRow and add the desired pair of lines.

     <Style x:Key="DataGridRowStyleStateGreen" TargetType="{x:Type DataGridRow}"> <Setter Property="Controls:DataGridRowHelper.SelectionUnit" Value="{Binding SelectionUnit, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type DataGrid}}}"/> <Setter Property="Margin" Value="0"/> <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/> <Setter Property="ValidationErrorTemplate"> <Setter.Value> <ControlTemplate> <Grid Margin="2,0" ToolTip="{Binding DataContext.ErrorContent, RelativeSource={RelativeSource Self}}" VerticalAlignment="Center"> <Path Data="M31.630585,39.233818L56.261485,14.603018C56.879785,13.984618,57.882285,13.984618,58.500685,14.603018L83.131485,39.233818C83.749885,39.852218,83.749885,40.854718,83.131485,41.473018L58.500685,66.103918C57.882385,66.722218,56.879785,66.722218,56.261485,66.103918L31.630585,41.473018C31.012285,40.854718,31.012285,39.852218,31.630585,39.233818z" Fill="{DynamicResource ControlsValidationBrush}" Height="20" Stretch="Uniform" Width="20"/> <Path Data="M53.781741,31.196677C51.544017,31.196677 49.719241,33.021453 49.719241,35.259177 49.719241,37.496901 51.544017,39.321677 53.781741,39.321677 56.019465,39.321677 57.844241,37.496901 57.844241,35.259177 57.844241,33.021453 56.019465,31.196677 53.781741,31.196677z M49.687991,9.821677L49.719241,10.352927 50.937991,29.821677 56.625491,29.821677 57.875491,9.821677 49.687991,9.821677z" Fill="{DynamicResource ValidationTextBrush}" HorizontalAlignment="Center" Height="10" Stretch="Uniform" VerticalAlignment="Center" Width="10"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> <Style.Triggers> <!--мой триггер--> <DataTrigger Binding="{Binding State}" Value="InProgress"> <Setter Property="Background" Value="GreenYellow"></Setter> </DataTrigger> <!----> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding (Controls:DataGridRowHelper.SelectionUnit), RelativeSource={RelativeSource Self}}" Value="FullRow"/> <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true"/> </MultiDataTrigger.Conditions> <Setter Property="Background" Value="{DynamicResource MetroDataGrid.HighlightBrush}"/> <Setter Property="Foreground" Value="{DynamicResource MetroDataGrid.HighlightTextBrush}"/> <Setter Property="BorderBrush" Value="{DynamicResource MetroDataGrid.HighlightBrush}"/> </MultiDataTrigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding (Controls:DataGridRowHelper.SelectionUnit), RelativeSource={RelativeSource Self}}" Value="FullRow"/> <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true"/> <Condition Binding="{Binding (Selector.IsSelectionActive), RelativeSource={RelativeSource Self}}" Value="false"/> </MultiDataTrigger.Conditions> <Setter Property="Background" Value="{DynamicResource MetroDataGrid.InactiveSelectionHighlightBrush}"/> <Setter Property="BorderBrush" Value="{DynamicResource MetroDataGrid.InactiveSelectionHighlightBrush}"/> <Setter Property="Foreground" Value="{DynamicResource MetroDataGrid.InactiveSelectionHighlightTextBrush}"/> </MultiDataTrigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding (Controls:DataGridRowHelper.SelectionUnit), RelativeSource={RelativeSource Self}}" Value="FullRow"/> <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="true"/> </MultiDataTrigger.Conditions> <Setter Property="Background" Value="{DynamicResource MetroDataGrid.MouseOverHighlightBrush}"/> <Setter Property="BorderBrush" Value="{DynamicResource MetroDataGrid.MouseOverHighlightBrush}"/> </MultiDataTrigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding (Controls:DataGridRowHelper.SelectionUnit), RelativeSource={RelativeSource Self}}" Value="FullRow"/> <Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="false"/> </MultiDataTrigger.Conditions> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> </MultiDataTrigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding (Controls:DataGridRowHelper.SelectionUnit), RelativeSource={RelativeSource Self}}" Value="FullRow"/> <Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="false"/> <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true"/> </MultiDataTrigger.Conditions> <Setter Property="Foreground" Value="{DynamicResource MetroDataGrid.HighlightTextBrush}"/> <Setter Property="Background" Value="{DynamicResource MetroDataGrid.DisabledHighlightBrush}"/> <Setter Property="BorderBrush" Value="{DynamicResource MetroDataGrid.DisabledHighlightBrush}"/> </MultiDataTrigger> </Style.Triggers> </Style> } "Height =" <Style x:Key="DataGridRowStyleStateGreen" TargetType="{x:Type DataGridRow}"> <Setter Property="Controls:DataGridRowHelper.SelectionUnit" Value="{Binding SelectionUnit, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type DataGrid}}}"/> <Setter Property="Margin" Value="0"/> <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/> <Setter Property="ValidationErrorTemplate"> <Setter.Value> <ControlTemplate> <Grid Margin="2,0" ToolTip="{Binding DataContext.ErrorContent, RelativeSource={RelativeSource Self}}" VerticalAlignment="Center"> <Path Data="M31.630585,39.233818L56.261485,14.603018C56.879785,13.984618,57.882285,13.984618,58.500685,14.603018L83.131485,39.233818C83.749885,39.852218,83.749885,40.854718,83.131485,41.473018L58.500685,66.103918C57.882385,66.722218,56.879785,66.722218,56.261485,66.103918L31.630585,41.473018C31.012285,40.854718,31.012285,39.852218,31.630585,39.233818z" Fill="{DynamicResource ControlsValidationBrush}" Height="20" Stretch="Uniform" Width="20"/> <Path Data="M53.781741,31.196677C51.544017,31.196677 49.719241,33.021453 49.719241,35.259177 49.719241,37.496901 51.544017,39.321677 53.781741,39.321677 56.019465,39.321677 57.844241,37.496901 57.844241,35.259177 57.844241,33.021453 56.019465,31.196677 53.781741,31.196677z M49.687991,9.821677L49.719241,10.352927 50.937991,29.821677 56.625491,29.821677 57.875491,9.821677 49.687991,9.821677z" Fill="{DynamicResource ValidationTextBrush}" HorizontalAlignment="Center" Height="10" Stretch="Uniform" VerticalAlignment="Center" Width="10"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> <Style.Triggers> <!--мой триггер--> <DataTrigger Binding="{Binding State}" Value="InProgress"> <Setter Property="Background" Value="GreenYellow"></Setter> </DataTrigger> <!----> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding (Controls:DataGridRowHelper.SelectionUnit), RelativeSource={RelativeSource Self}}" Value="FullRow"/> <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true"/> </MultiDataTrigger.Conditions> <Setter Property="Background" Value="{DynamicResource MetroDataGrid.HighlightBrush}"/> <Setter Property="Foreground" Value="{DynamicResource MetroDataGrid.HighlightTextBrush}"/> <Setter Property="BorderBrush" Value="{DynamicResource MetroDataGrid.HighlightBrush}"/> </MultiDataTrigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding (Controls:DataGridRowHelper.SelectionUnit), RelativeSource={RelativeSource Self}}" Value="FullRow"/> <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true"/> <Condition Binding="{Binding (Selector.IsSelectionActive), RelativeSource={RelativeSource Self}}" Value="false"/> </MultiDataTrigger.Conditions> <Setter Property="Background" Value="{DynamicResource MetroDataGrid.InactiveSelectionHighlightBrush}"/> <Setter Property="BorderBrush" Value="{DynamicResource MetroDataGrid.InactiveSelectionHighlightBrush}"/> <Setter Property="Foreground" Value="{DynamicResource MetroDataGrid.InactiveSelectionHighlightTextBrush}"/> </MultiDataTrigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding (Controls:DataGridRowHelper.SelectionUnit), RelativeSource={RelativeSource Self}}" Value="FullRow"/> <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="true"/> </MultiDataTrigger.Conditions> <Setter Property="Background" Value="{DynamicResource MetroDataGrid.MouseOverHighlightBrush}"/> <Setter Property="BorderBrush" Value="{DynamicResource MetroDataGrid.MouseOverHighlightBrush}"/> </MultiDataTrigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding (Controls:DataGridRowHelper.SelectionUnit), RelativeSource={RelativeSource Self}}" Value="FullRow"/> <Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="false"/> </MultiDataTrigger.Conditions> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> </MultiDataTrigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding (Controls:DataGridRowHelper.SelectionUnit), RelativeSource={RelativeSource Self}}" Value="FullRow"/> <Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="false"/> <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true"/> </MultiDataTrigger.Conditions> <Setter Property="Foreground" Value="{DynamicResource MetroDataGrid.HighlightTextBrush}"/> <Setter Property="Background" Value="{DynamicResource MetroDataGrid.DisabledHighlightBrush}"/> <Setter Property="BorderBrush" Value="{DynamicResource MetroDataGrid.DisabledHighlightBrush}"/> </MultiDataTrigger> </Style.Triggers> </Style> 
    • Yeah, I wanted to offer the same thing. - VladD
    • @VladD, I first wanted to make BasedOn for a new style, but for some reason it did not work. It's cool that VS15 allows you to get ready-to-use control styles in a couple of clicks :) - Lightness
    • BasedOn would also work on the idea, the only question is what should be based on. - VladD
    • @VladD, Tried it like this <Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}"> but there was no effect. - Lightness
    • Perhaps the DataGrid somehow overlaps the style or parts of it, so inheritance does not work. In any case, well, that worked like your answer. It may make sense for future readers to write how easy it is to get an existing style (many do not know this, and this is important). - VladD