2014-02-08 47 views
0

1,如果你選擇在一個白色的單元格,設置行背景WPF XAML如何爲數據網格編寫觸發器或多觸發器?

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> 
+0

我猜你是設置研究背景,以'White'既然你已經重寫'HighlightBrushKey'到'Transparent'並選擇電池隱藏單元格內容。所以,將ForeGround設置爲黑色,我認爲就足夠了。這種方式你不必擔心沒有使用背景黃色更新單元格的背景。 –

+0

這是真的。這是一個細節,但仍然希望找到解決這個問題的辦法。 – user231605

+0

在解決方案中添加了答案。請檢查。 –

回答

2

我猜你設置的背景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; 
    } 
} 
+1

謝謝你,這就是我想要的。 – user231605