WPF DataGrid AlternatingRowBackground覆盖背景的Style DataTrigger

时间:2019-02-07 09:19:33

标签: wpf wpfdatagrid wpf-style

我有一个DataGrid,其中显示了多行数据。为了帮助视觉上区分行,我为交替的行添加了背景色。

但是,有些行包含非常有趣的数据,我希望吸引用户的注意,因此我使用Style DataTrigger突出显示了这些特定行。

我的问题是交替的背景色优先-只有奇数行(没有背景色)显示高光。

请注意,这是一个使用MVVM模式的数据绑定DataGrid(无“ code-behind”)。

(非常删减)代码如下:

<DataGrid ItemsSource="{Binding FilteredTraceMessages, Mode=OneWay}" 
            AlternatingRowBackground="AliceBlue"
            .......>

    <DataGrid.Columns>
        ....
    </DataGrid.Columns>

    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Severity}" Value="Error">
                    <Setter Property="Background" Value="LightSalmon"></Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding Severity}" Value="Warning">
                    <Setter Property="Background" Value="LemonChiffon"></Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
</DataGrid>

1 个答案:

答案 0 :(得分:1)

您必须将Backround设置为相同的优先级。参见Dependency Property Setting Precedence List
AlternatingRowBackground="AliceBlue"中删除DataGrid并将AlternationCount="2"放在此处。然后,首先添加AlternationIndex的触发器。

<DataGrid ItemsSource="{Binding FilteredTraceMessages, Mode=OneWay}" AlternationCount="2"
    .......>

    <DataGrid.Columns>
        ....
    </DataGrid.Columns>

    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Style.Triggers>
                <Trigger Property="AlternationIndex" Value="1">
                    <Setter Property="Background" Value="AliceBlue"/>
                </Trigger>
                <DataTrigger Binding="{Binding Severity}" Value="Error">
                    <Setter Property="Background" Value="LightSalmon"></Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding Severity}" Value="Warning">
                    <Setter Property="Background" Value="LemonChiffon"></Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
</DataGrid>