Datagrid-在后台加入AlternateIndex触发器,在后台加入DataTrigger

时间:2019-04-05 20:28:46

标签: c# wpf xaml datatrigger

起初,我在我的数据网格上有一个非常简单的样式触发器,它将根据对象的属性为行着色:

<DataGrid AlternationCount="2">
    <DataGrid.RowStyle>
        <Style TargetType="{x:Type DataGridRow}">
            <Setter Property="Background" Value="{Binding Path=RowStatus, Converter={StaticResource statusColorConverter}}" />
        </Style>
    </DataGrid.RowStyle>
</DataGrid>

它按预期工作,因此如果我将一行标记为删除,它将变成红色,否则它将保持白色。 然后,我决定为这些行添加交替的颜色(以便在有很多未修改的白色行时,它们变得更加可读)。虽然我认为这是一个简单的任务,但事实证明那是我现在遇到的某种触发地狱。

据我从Internet上了解到的内容来看,WPF会考虑触发器的编写方式,但是事实证明,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>

能否请您告诉我为什么这些触发器不按我的想法工作以及如何使它们起作用?

0 个答案:

没有答案