WPF DataGrid AlternatingRowBackground 覆盖背景的 Style DataTrigger
WPF DataGrid AlternatingRowBackground overriding the Style DataTrigger for background
我有一个显示多行数据的 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>
您必须将 Backround
设置为相同的优先级。参见 Dependency Property Setting Precedence List
从 DataGrid
中删除 AlternatingRowBackground="AliceBlue"
并将 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>
我有一个显示多行数据的 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>
您必须将 Backround
设置为相同的优先级。参见 Dependency Property Setting Precedence List
从 DataGrid
中删除 AlternatingRowBackground="AliceBlue"
并将 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>