DataGrid's selected row color when inactive DataGrid's selected row color when inactive wpf wpf

DataGrid's selected row color when inactive


After ages of searching, I found a surprisingly simple way to do this that's cleaner than the Got/LostFocus approach posted earlier:

<DataGrid.Resources>    <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="DarkGray"/></DataGrid.Resources>

This just sets the inactive background colour to DarkGray, leaving the active background colour to the default, but you can change that too using the SystemColors.HighlightBrushKey too of course.

The foreground resource key for inactive selections is SystemColors.InactiveSelectionHighlightTextBrushKey.


Complete solution that works for 4.0. Note that this on the CellStyle.

<DataGrid.CellStyle>    <!--Override Highlighting so that its easy to see what is selected even when the control is not focused-->    <Style TargetType="{x:Type DataGridCell}">        <Style.Triggers>            <Trigger  Property="IsSelected" Value="true">                <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />                <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" />                <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />            </Trigger>            <MultiDataTrigger>                <MultiDataTrigger.Conditions>                    <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />                    <Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}, Path=IsKeyboardFocusWithin}" Value="False" />                </MultiDataTrigger.Conditions>                <MultiDataTrigger.Setters>                    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />                    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" />                    <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />                </MultiDataTrigger.Setters>            </MultiDataTrigger>        </Style.Triggers>    </Style></DataGrid.CellStyle>


Do it like this:

<DataGrid ...>    <DataGrid.Resources>         <Style TargetType="DataGridRow">             <Style.Resources>                 <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"/>                                              </Style.Resources>         </Style>    </DataGrid.Resources> ...