1 如果选择单元格,请将行背景设置为白色
和
2 如果选择单元格并且行背景为黄色,则不会更改行背景
我为第一个条件编写了这段代码,但我不知道如何同时为第一个和第二个条件编写代码。也许我需要一个多触发器?:
<DataGrid.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
<Style TargetType="DataGridCell">
<Style.Triggers>
<Trigger Property="IsSelected"
Value="True">
<Setter Property="Background"
Value="White" />
<Setter Property="Foreground"
Value="Black" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
我猜您正在将背景设置为White
,因为您已将HighlightBrushKey
覆盖为透明并且选择单元格会隐藏单元格内容。因此,我想将前景设置为黑色就足够了。这样您就不必担心不更新带有黄色背景的单元格背景。
但是,无论您仍然想这样做,您都可以使用单个MultiDataTrigger
来执行此操作,您需要检查 dataGridRow 的背景是否为黄色,然后什么都不做。但是,由于除非背景是黄色,否则您希望这样做,因此请使用IValueConverter查看背景是否不是黄色。
<local:MyConverter x:Key="MyConverter"/>
//Declare local namespace with converter namespace in XAML
<Style TargetType="DataGridCell">
<Setter Property="Foreground" Value="Black" />
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsSelected,
RelativeSource={RelativeSource Self}}" Value="True"/>
<Condition Binding="{Binding Background,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=DataGridRow},
Converter={StaticResource MyConverter}}"
Value="False"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="White" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
转换器将是:
public class MyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
return System.Windows.Media.Brushes.Yellow.Equals(value);
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
return Binding.DoNothing;
}
}