Datagrid - объединение триггера AlternationIndex на фоне и DataTrigger на фоне - PullRequest
0 голосов
/ 05 апреля 2019

Сначала у меня был очень простой триггер стиля в моей сетке данных, который бы окрашивал строку в зависимости от свойства объекта:

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

Не могли бы вы сказать мне, почему эти триггеры не работают так, как я думаю, и как заставить их работать?

...