0

1 セルを選択する場合、行の背景を白色に設定します

2 セルを選択し、行の背景が黄色の場合、行の背景は変更されません

最初の条件でこのコードを書きましたが、最初と 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し、セルを選択するとセルの内容が非表示になるため、背景をに設定していると思います。したがって、Foreground を Black に設定するだけで十分だと思います。そうすれば、セルの背景を黄色の背景で更新しないことを心配する必要はありません。


ただし、それでもやりたい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;
    }
}
于 2014-02-08T11:01:08.303 に答える