2014-02-08 1 views
0

1WPF XAML DataGrid에 트리거 또는 멀티 트리거를 작성하는 방법은 무엇입니까? 당신이 백색에 셀 설정 행 배경을 선택하면 셀 및 행 배경이 노란색을 선택하면

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

난 당신이 오버라이드 (override) 이후 당신이 White''에 대한 배경을 설정하는 것 같아요'HighlightBrushKey'는'Transparent' 및 선택 셀은 셀 내용을 숨 깁니다합니다. Foreground를 Black으로 설정하면 충분합니다. 그 방법은 당신이 배경 노란색으로 세포의 배경을 업데이 트하지 않는 것에 대해 걱정할 필요가 없습니다. –

+0

사실입니다. 이것은 세부 사항이지만 그럼에도 불구하고이 문제를 해결하고자합니다. – user231605

+0

솔루션에 대한 답변이 추가되었습니다. 확인해주십시오. –

답변

2

난 당신이 투명에 HighlightBrushKey를 오버라이드 (override)하고 선택 셀은 셀 내용을 숨 깁니다 때문에 당신이 White에 배경을 설정하는 것 같아요. 그래서 Foreground를 Black으로 설정하면 충분할 것입니다. 그 방법은 당신이 배경 노란색으로 세포의 배경을 업데이 트하지 않는 것에 대해 걱정할 필요가 없습니다.


는하지만, 그러나 아직도 당신이하고 싶어, 당신은 dataGridRow의 배경이 노란색 인 경우 확인해야 할 경우 단일 MultiDataTrigger 사용 후 아무것도하지 않고 있다고 할 수 있습니다. 하지만 배경이 황색이 아니면, 을 사용하면 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