2011-01-25 18 views
35
私は運のないこの方法..を試してみました

.. WPFデータグリッド着色代替行

<Style TargetType="{x:Type DataGridRow}"> 
    <Style.Triggers> 
     <Trigger Property="ItemsControl.AlternationIndex" Value="0"> 
      <Setter Property="Foreground" Value="Red" /> 
    </Trigger> 
    </Style.Triggers> 
</Style> 

は、行のインデックスを取得する方法はありますか? 私はまだ行っていない場合でも、

<DataTrigger Binding="{Binding AlternationIndex}" Value="0"> 
    <Setter Property="Foreground" Value="Green"></Setter> 
</DataTrigger> 

答えて

34

を試してみました、あなたはデータグリッドのAlternationCountプロパティを設定する必要があります。

<DataGrid AlternationCount="2" 
      ... /> 

あなたはさらにForegroundプロパティがDataGridRowのいずれかの制御に使用されているかどうかを確認する必要があります。バックグラウンド・プロパティを設定して、変更内容をテストしてみてください。

+1

私は周りを探索しており、これを見て "Aah yes!"のようでした。 :)おかげで!... –

33

最後に、これは一般的に行の色を交互に設定するためのものです。

<Style TargetType="{x:Type DataGrid}"> 
    <Setter Property="Background" Value="#FFF" /> 
    <Setter Property="AlternationCount" Value="2" /> 
</Style> 

<Style TargetType="{x:Type DataGridRow}"> 
    <Style.Triggers> 
     <Trigger Property="ItemsControl.AlternationIndex" Value="0"> 
      <Setter Property="Background" Value="#CCC"></Setter> 
     </Trigger> 
     <Trigger Property="ItemsControl.AlternationIndex" Value="1"> 
      <Setter Property="Background" Value="#EEE"></Setter> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

これは、条件が満たされたときに自分自身で交互の色のオーバーライドが必要なので、私が使用しています。 – rosta

17

このような交互の背景を設定してみてください:

AlternationCount="2" AlternatingRowBackground="Bisque" 
+0

これは、ポイントまでは短いので、これは私が出会った最良の解決方法です。 – Vectoria

+0

これは正しい回答としてマークする必要があります –

0

は、私が交代色を無効にしたいので、この

<DataGrid AlternationCount="2" 
      AlternatingRowBackground="Salmon" ........ 
+1

この回答は[@ Th3G33k](http://stackoverflow.com/a/35301853/1708751)によって既に提案されています。 –

0

は、最後に私は、ロビンMabenとTh3G33kソリューションの組み合わせを使用してください何らかの条件が満たされたとき、私自身と一緒に。 ありがとうございます。

<DataGrid x:Name="gridCustomerOrderItems" HorizontalAlignment="Stretch" 
        VerticalAlignment="Stretch" AutoGenerateColumns="False" 
        AlternationCount="2" 
        IsReadOnly="True" CanUserReorderColumns="True" 
         ScrollViewer.CanContentScroll="True" 
         ScrollViewer.VerticalScrollBarVisibility="Auto" 
         ScrollViewer.HorizontalScrollBarVisibility="Auto"> 

       <DataGrid.RowStyle> 
        <Style TargetType="DataGridRow"> 
         <Style.Triggers> 
          <!--first alteraniting colour--> 
          <Trigger Property="ItemsControl.AlternationIndex" Value="1"> 
           <Setter Property="Background" Value="#EEE"></Setter> 
          </Trigger> 
          <!--then override with my own colour--> 
          <DataTrigger Binding="{Binding InvoiceSet}" Value="True"> 
           <Setter Property="Background" Value="Green"></Setter> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </DataGrid.RowStyle>