2016-08-17 8 views
0

DataGrid은 데이터베이스에서 채워지는 CollectionViewSource에 바인딩되어 있습니다. 이러한 항목 중 일부는 "활성"이며 다른 항목은 "비활성"입니다. 비활성 행에 다른 전경색을 지정하고 싶습니다. 색상은 선택된 행을 적용하지 않습니다. System.HighlightTextBrushKey은 강조 표시된 색상을 변경하려는 시도를 무시하는 것 같습니다. 다음은 선택되지 않은 셀에서 작동하는 코드입니다.선택한 DataGrid 행의 조건부 전경색 색

<DataGrid.Resources> 
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{StaticResource ThemeHighlightColor}"/> 
    <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="{StaticResource ThemeHighlightColor}"/> 
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/> 
    <Style TargetType="{x:Type DataGridRow}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=active}" Value="False"> 
       <Setter Property="Foreground" Value="DarkOrchid"/> 
       <Setter Property="FontWeight" Value="DemiBold"/> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding Path=active}" Value="True"> 
       <Setter Property="Foreground" Value="Black"/> 
       <Setter Property="FontWeight" Value="Normal"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGrid.Resources> 

상기 경우에서, "비활성"행을 선택한 경우에도 DemiBold 폰트에 대해 수행되지만, 단지 비 선택 행들은 DarkOrchid 색 취할. 대신, 그들은 검은 색으로 SystemColors.HighlightTextBrushKey 색을 사용합니다. 명시 적으로 상태를 명시하지 않더라도이 선택된 행은 기본값 SystemColors.HighlightTextBrushKey 흰색을 사용합니다.

위의 DataTriggers 대신 MultiTrigger을 사용해 보았습니다.하지만 똑같은 문제 (글꼴은 굵게 표시되지만 검은 색으로 남습니다)가 있습니다. 여기에 MultiTrigger :

<MultiDataTrigger> 
    <MultiDataTrigger.Conditions> 
     <Condition Binding="{Binding Path=active}" Value="False"/> 
     <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True"/> 
    </MultiDataTrigger.Conditions> 
    <MultiDataTrigger.Setters> 
     <Setter Property="Foreground" Value="DarkOrchid"/> 
     <Setter Property="FontWeight" Value="DemiBold"/> 
    </MultiDataTrigger.Setters> 
</MultiDataTrigger> 

어디서나 해결책을 찾을 수 없습니다. 선택한 행의 전경색을 일부 바운드 값에서 조건부로 만들 수있는 방법이 있습니까?

+0

DataGrid.Resources에서 HighlightTextBrushKey를 DarkOrchid로 설정하려고 했습니까? 예를 들어, Dark Orchid로 선택된 행을 모두 바꿉니다. sthotakura

+0

비활성이고 선택된 행만 원합니다. –

+0

아, 네 말이 맞아. – sthotakura

답변

0

이 문제에 직면했을 때 셀 내용 (내 경우 TextBlock)의 스타일을 만들었습니다. 나는 스타일을 DataGrid.Resources에 두었다. 귀하의 경우에는 다음과 같이 표시됩니다.

<Datagrid.Resouces> 
    <Style TargetType="{x:Type TextBlock}" x:Key="Text"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=active}" Value="False"> 
     <Setter Property="Foreground" Value="DarkOrchid"/> 
     <Setter Property="FontWeight" Value="DemiBold"/> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding Path=active}" Value="True"> 
     <Setter Property="Foreground" Value="Black"/> 
     <Setter Property="FontWeight" Value="Normal"/> 
     </DataTrigger> 
    </Style.Triggers> 
    </Style> 
</Datagrid.Resouces> 

거기에서 각 셀에 사용할 수 있습니다. 이 같은 보일 것이다 :

<DataGridTextColumn Header="Name" Binding="{Binding FirstName}" 
        ElementStyle="{StaticResource Text}" /> 

그것은 당신이 가지고있는 각 열에에 스타일을 추가하는 고통의 비트입니다, 그러나 이것은 DataGridSystem.HighlightTextBrushKey보다 우선합니다.

그런데이 스타일을 각각 스타일링하면 선택 및 마우스 오버를 포함한 모든 조건에서 전경색이 유지됩니다. 이러한 조건에 대해 다른 전경색이 필요한 경우 Style.Triggers 컬렉션에 추가해야합니다.