1. ホーム
  2. wpf

非アクティブ時のデータグリッドの選択行の色

2023-09-02 20:29:24

質問

WPF DataGridがフォーカスを失ったとき、選択された行の色を変更するには、どのようにスタイルを設定すればよいですか?

どのように解決するのですか?

自分で答えを見つける。

DataGridのリソースに、背後のコードから「Color」プロパティを変更できるブラシを追加し、それにHighlightBrushKeyを参照します。

<DataGrid.Resources>
    <SolidColorBrush x:Key="SelectionColorKey" Color="DarkGray"/>
    <Style TargetType="DataGridRow">
        <Style.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{Binding Source={StaticResource SelectionColorKey}, Path=Color}"/>
        </Style.Resources>
    </Style>
</DataGrid.Resources>

次にDataGridsのイベントハンドラを追加して、手動で色を変更します。

private void DataGrid1_LostFocus(object sender, RoutedEventArgs e)
{
    ((SolidColorBrush)DataGrid1.Resources["SelectionColorKey"]).Color = Colors.DarkGray;
}

private void DataGrid1_GotFocus(object sender, RoutedEventArgs e)
{
    ((SolidColorBrush)DataGrid1.Resources["SelectionColorKey"]).Color = SystemColors.HighlightColor;
}

private void DataGrid1_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
    ((SolidColorBrush)DataGrid1.Resources["SelectionColorKey"]).Color = Colors.DarkGray;
}