Сначала у меня был очень простой триггер стиля в моей сетке данных, который бы окрашивал строку в зависимости от свойства объекта:
<DataGrid AlternationCount="2">
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Background" Value="{Binding Path=RowStatus, Converter={StaticResource statusColorConverter}}" />
</Style>
</DataGrid.RowStyle>
</DataGrid>
Это сработало как задумано, и поэтому, если я отмечу строку для удаления, она станет красной, в противном случае она останется белой.
Затем я решил добавить чередующиеся цвета к этим строкам (чтобы они стали более читабельными при большом количестве неизмененных белых строк). Хотя я думал, что это будет простая задача, это оказалось своего рода спусковым крючком, в котором я сейчас застрял.
Насколько я понимаю из того, что я прочитал через Интернет, WPF принимает порядок записи ваших триггеров, но в моем случае это не работает. Насколько я знаю, это должно работать просто отлично, но это не так:
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Background" Value="White"/>
<Style.Triggers>
<Trigger Property="AlternationIndex" Value="1">
<Setter Property="Background" Value="Wheat"/>
</Trigger>
<DataTrigger Binding="{Binding Path=RowStatus, Converter={StaticResource statusColorConverter}}" >
<Setter Property="Background" Value="{Binding Path=RowStatus, Converter={StaticResource statusColorConverter}}"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
С тех пор я пробовал несколько комбинаций (которые вы можете видеть ниже), взятых из нескольких других SO-ответов, но лучший результат, который я получил до сих пор, это только нечетные или четные строки правильной окраски и реакция триггера.
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<!--<Setter Property="Background" Value="{Binding Path=RowStatus, Converter={StaticResource statusColorConverter}}" />-->
<Style.Triggers>
<!--<DataTrigger Binding="{Binding Path=RowStatus, Converter={StaticResource statusColorConverter}}" >
<Setter Property="Background" Value="{Binding Path=RowStatus, Converter={StaticResource statusColorConverter}}"></Setter>
</DataTrigger>-->
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
<Setter Property="Background" Value="WhiteSmoke"></Setter>
</Trigger>
<!--<Trigger Property="ItemsControl.AlternationIndex" Value="0">
<Setter Property="Background" Value="{Binding Path=RowStatus, Converter={StaticResource statusColorConverter}}"></Setter>
</Trigger>-->
<!--first alteraniting colour-->
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Background" Value="#FFF"></Setter>
</Trigger>
<!--then override with my own colour-->
<!--<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Background" Value="{Binding Path=RowStatus, Converter={StaticResource statusColorConverter}}"></Setter>
</Trigger>-->
<DataTrigger Binding="{Binding Path=RowStatus, Converter={StaticResource statusColorConverter}}" >
<Setter Property="Background" Value="{Binding Path=RowStatus, Converter={StaticResource statusColorConverter}}"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
Не могли бы вы сказать мне, почему эти триггеры не работают так, как я думаю, и как заставить их работать?