WPF XAML 如何为数据网格编写触发器或多触发器



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;
    }
}

相关内容

  • 没有找到相关文章

最新更新