データグリッドがあり、レコードのステータスに応じて行の色が異なります (有効は白、問題は金、禁止は赤)。
問題は、行が選択されると、すべてが均一な色になり、ステータスを判断できなくなることです。これと同様の方法でハイライトの色をバインドしたいと思います。
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Background" Value="{Binding Member, Converter={StaticResource MemberBackgroundConverter}}" />
<Setter Property="HighlightBrushKey" Value="{Binding Member, Converter={StaticResource MemberHighlightConverter}}" />
</Style>
</DataGrid.RowStyle>
上記の最初のセッターは動作します。2番目のものを機能させる方法はありますか?行ごとに HighlightBrush を設定する方法はありますか?
編集:以下は、私が現在取り組んでいるものです。これが最善の方法であると示唆するつもりはありません。単にこの方法でうまくいくということです。
XAML:
<DataGrid.Resources>
<SolidColorBrush x:Key="SelectionBackgroundColorKey" />
<LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="{Binding Source={StaticResource SelectionBackgroundColorKey}, Path=Color}" Offset="0.0" />
<GradientStop Color="White" Offset="0.3" />
<GradientStop Color="{Binding Source={StaticResource SelectionBackgroundColorKey}, Path=Color}" Offset="1.0" />
</LinearGradientBrush>
<SolidColorBrush x:Key="SelectionTextColorKey" Color="Black" />
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="{Binding Source={StaticResource SelectionTextColorKey}, Path=Color}" />
</DataGrid.Resources>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Background" Value="{Binding BindsDirectlyToSource=True, Converter={StaticResource ReservationBackgroundConverter}}" />
<Setter Property="Foreground" Value="{Binding IsNew, Converter={StaticResource IsNewForegroundConverter}}" />
</Style>
</DataGrid.RowStyle>
コード:
private void DataGridReservationsSelectionChanged(object argSender, SelectionChangedEventArgs argEvtArgs)
{
Reservation LocalReservation;
((SolidColorBrush) dataGridReservations.Resources["SelectionBackgroundColorKey"]).Color = Colors.SlateGray;
((SolidColorBrush) dataGridReservations.Resources["SelectionTextColorKey"]).Color = Colors.Black;
LocalReservation = dataGridReservations.SelectedItem as Reservation;
if (LocalReservation == null)
{
return;
}
if(LocalReservation.IsArrived)
{
((SolidColorBrush)dataGridReservations.Resources["SelectionBackgroundColorKey"]).Color = Colors.ForestGreen;
((SolidColorBrush)dataGridReservations.Resources["SelectionTextColorKey"]).Color = Colors.Black;
return;
}
//Is this Reservation a Problem?
if (LocalReservation.Member.IsProblem)
{
((SolidColorBrush) dataGridReservations.Resources["SelectionBackgroundColorKey"]).Color = Colors.Goldenrod;
((SolidColorBrush) dataGridReservations.Resources["SelectionTextColorKey"]).Color = Colors.Black;
return;
}
//Is this Reservation Banned?
if (LocalReservation.Member.IsBanned)
{
((SolidColorBrush) dataGridReservations.Resources["SelectionBackgroundColorKey"]).Color = Colors.Firebrick;
((SolidColorBrush) dataGridReservations.Resources["SelectionTextColorKey"]).Color = Colors.Black;
return;
}
}
このアプローチにより、選択されていない行をそれぞれの独立した行に設定し、選択した色をそれぞれの独立した行に設定することができます。