1
我有一個datagrid和行是不同的顏色,取決於它們中的記錄的狀態(有效是白色,問題是黃金,禁止是紅色)。如何綁定WPF中的DataGrid.HighlightBrush按行
問題是,當行被選中時,它們都會變成統一的顏色,並且無法再確定狀態。我想以類似的方式綁定高亮顏色:
<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>
上面的第一個Setter工作。有沒有辦法讓第二個人工作?有沒有什麼辦法可以設置每行的高亮刷新?編輯: 以下是我目前工作的內容。我並不是想說這是最好的方法,只是這種方式有效。
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;
}
}
這種方式讓我有行未選中的顏色,每個獨立的行和選定的顏色,每個獨立的行集設置。
這不是我要找的。例如,未選中的行是LightRed,因此我希望所選行是BrickRed。我想要改變顏色,但仍然有助於確定狀態。我遇到的問題是行是不同的顏色(紅色,綠色和藍色色調),所以每行的選擇顏色需要不同。 –
已更新的答案。讓我知道,如果這就是你要找的。 – KornMuffin
如果我可以使綁定工作,這看起來最有希望。這是我得到的,它不工作: <條件綁定=「{Binding RelativeSource = {RelativeSource FindAncestor,AncestorType = {x:Type DataGridRow}},Path = IsSelectedProperty}」Value =「true」/> Unselected工作正常。事實上,你甚至不需要指定IsSelected = false。 –