wpf datagrid альтернативная раскраска строк - PullRequest
40 голосов
/ 25 января 2011

Я попробовал этот метод .. без удачи ..

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

Ответы [ 5 ]

36 голосов
/ 25 января 2011

Наконец, это то, что я закончил для общей настройки альтернативных цветов строк.

<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>
34 голосов
/ 25 января 2011

Если это еще не сделано, вы должны установить свойство AlternationCount DataGrid:

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

Вам следует дополнительно проверить, используется ли свойство Foreground для какого-либо элемента управления в DataGridRow. Попробуйте установить свойство Background для проверки чередования.

27 голосов
/ 09 февраля 2016

Попробуйте установить переменный фон следующим образом:

  AlternationCount="2" AlternatingRowBackground="Bisque"
1 голос
/ 20 февраля 2017

Попробуйте это

  <DataGrid AlternationCount="2"
            AlternatingRowBackground="Salmon" ........
0 голосов
/ 06 января 2018

Наконец, я использовал комбинацию решения Robin 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>
...