2011-01-25 17 views
35

Ho provato questo metodo .. senza fortuna ..WPF datagrid si alternano fila colorazione

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

C'è un modo per ottenere la riga di indice? Ho anche provato

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

risposta

34

A meno già fatto, è necessario impostare la proprietà AlternationCount di DataGrid:

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

Si dovrebbe inoltre verificare se la proprietà di primo piano viene utilizzato per qualsiasi controllo in DataGridRow. Prova a impostare la proprietà Background per testare la roba di alternanza.

+1

Stavo cercando in giro e mi sono imbattuto in questo ed era come "Aah sì!". :) Grazie però! .. –

33

Infine, questo è quello che ho finito per impostare genericamente i colori delle righe alternate.

<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

Grazie, questo lo uso, perché voglio che il colore di alternanza sostituisca il mio quando la condizione è soddisfatta: – rosta

17

impostare lo sfondo alternata come questo Prova:

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

Questa è la soluzione migliore che ho trovato, perché è breve al punto. – Vectoria

+0

Questa dovrebbe essere contrassegnata come risposta corretta –

0

Prova questa

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

Questa risposta è stata già suggerita da [@ Th3G33k] (http://stackoverflow.com/a/35301853/1708751). –

0

Infine ho usato combinazione di soluzione di Robin Maben e Th3G33k, perché voglio il colore alternanza di ignorare con il mio, quando viene soddisfatta una condizione. Grazie a entrambi.

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