2017-01-12 1 views
1

답을 찾으려고했지만 here의 질문에 답변하지 않았습니다.WPF DataGrid : 첫 번째 행의 스타일 만 어떻게 설정합니까?

몇 가지 복잡한 XAML을 시도했지만 결코 작동하지 않습니다. 첫 번째 행이 선택된 경우 아래 코드는 모두 행을 출력합니다. 어떤 행 인덱스가 선택되었는지에 관계없이 첫 번째 행만 회색으로 표시해야합니다.

<TextBlock.Style> 
    <Style TargetType="TextBlock"> 
     <Setter Property="Foreground" Value="Black"/> 
     <Setter Property="FontStyle" Value="Normal"/> 
     <Style.Triggers> 
      <MultiDataTrigger> 
       <MultiDataTrigger.Conditions> 
        <Condition Binding="{Binding Path=SelectedIndex, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}}}" Value="0"/> 
       </MultiDataTrigger.Conditions> 
       <Setter Property="Foreground" Value="Gray"/> 
       <Setter Property="FontStyle" Value="Italic"/> 
      </MultiDataTrigger> 
     </Style.Triggers> 
    </Style> 
</TextBlock.Style> 

누구든지 도움을 줄 수 있습니까?

감사합니다.

답변

1

ItemsControls (ref ListBox)에있는 AlternationCount 속성을 사용할 수 있습니다. 제안에 대한

<DataGrid ItemsSource="{Binding Items}" 
      AlternationCount="2147483647" 
      ... 
      > 
    <DataGrid.ItemContainerStyle> 
     <Style TargetType="DataGridRow"> 
      <Style.Triggers> 
       <Trigger Property="ItemsControl.AlternationIndex" Value="0"> 
        <Setter Property="Foreground" Value="Gray"/> 
        <Setter Property="FontStyle" Value="Italic"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.ItemContainerStyle> 
    ... 
</DataGrid> 

편집

<DataGrid ItemsSource="{Binding Items}" 
      AlternationCount="2" 
      VirtualizingStackPanel.IsVirtualizing="False"> 
      ... 
      > 
    <DataGrid.ItemContainerStyle> 
     <Style TargetType="DataGridRow"> 
      <Style.Triggers> 
       <Trigger Property="ItemsControl.AlternationIndex" Value="1"> 
        <Setter Property="Background" Value="Gray"/> 
       </Trigger> 
       <DataTrigger 
        Binding="{Binding RelativeSource={RelativeSource Mode=PreviousData}}" 
        Value="{x:Null}"> 
        <Setter Property="Foreground" Value="Gray"/> 
        <Setter Property="FontStyle" Value="Italic"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.ItemContainerStyle> 
    ... 
</DataGrid> 
+0

감사합니다. 하나의 작은 문제를 제외하면 작동합니다 : AlternationCount를 2와 같게해야합니다 (흰색과 회색 행 배경이 교대로 있음). AlternationCount를 Int.MaxValue로 설정하면 배경 색상이 사라집니다. 두 가지 기능을 모두 사용하도록 제안 하시겠습니까? – MrProgrammer

+0

물론,하지만 [IsVirtualizing = "False"] (http://stackoverflow.com/questions/28171955/how-to-set-color-for-first-row-in-datagrid#comment44741291_28175517)이 필요합니다. 첫 번째 방법을 선호합니다. – Funk

+0

다시 한번 감사드립니다. 나는 우리가 정말로 가깝다고 생각한다. 나는 그것이 밖으로 냄비 나는 방법을 볼 시간을 좀 더 주겠다. – MrProgrammer

관련 문제