0

1 如果选择单元格,则将行背景设置为白色

2 如果选择单元格且行背景为黄色,不改变行背景

我为第一个条件编写了这段代码,但我不知道如何同时满足第一个和第二个条件。也许我需要一个 MultiTrigger ?:

                                <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>
4

1 回答 1

3

我猜您正在将背景设置为,White因为您已覆盖HighlightBrushKey透明并且选择单元格会隐藏单元格内容。所以,我想将前景设置为黑色就足够了。这样您就不必担心没有用背景黄色更新单元格的背景。


但是,无论您仍然想这样做,您可以使用 singleMultiDataTrigger来检查 dataGridRow 的背景是否为黄色,然后什么也不做。但是由于您想要这样做,除非背景是黄色,所以使用IValueConverter来查看背景是否不是 Yellow

<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;
    }
}
于 2014-02-08T11:01:08.303 回答