WPF 中 AlternativeRow BackColor 的意外行为

Unexpected behavior of AlternativeRow BackColor in WPF

我正在使用 Microsoft 在 this page 提供的样式来设计我的 DataGrid。我没有改变这种风格,除了下面的一行启用替代行背景颜色。

<!--Style and template for the DataGrid.-->
    <Style TargetType="{x:Type DataGrid}">
        <Setter Property="AlternationCount" Value="2"/>
 ... and the rest of the style

我意识到这种风格的一个非常奇怪的行为。当您滚动 up/down 数据网格几次,然后您会看到替代行的背景颜色是混合的!如下图:

我希望在滚动之前出现一系列浅色 + 深色行;但滚动后一切都随机混淆了。在应用此样式之前,我在 DataGrid 定义中明确设置了替代行颜色,如下所示,我从未遇到过这种行为。

<DataGrid ItemsSource="{Binding Source={StaticResource itemsSource}}" AutoGenerateColumns="False" AlternatingRowBackground="#FF58C9FD" RowBackground="#00000000"/> 

有没有人建议我应该在哪里寻找问题?

这是 WPF DataGrid 上的一个已知虚拟化问题。

Here is a workaround,但请注意,如果您处理该 DataGrid 上的大量数据,它可能会导致严重的性能问题。

对此行为背后的机制有一个很好的解释 here

Gabriel 提到此行为是一个已知问题,当您尝试为数据网格(或通常的任何项目集合)创建全新样式时会引发该问题。

我尝试按照 Gabriel 的建议创建基于默认样式的样式,如下所示:

<Style TargetType="{x:Type DataGrid}" BasedOn="{StaticResource {x:Type DataGrid}}">
        <Setter Property="AlternationCount" Value="2"/>
        <Setter Property="AlternatingRowBackground" Value="OrangeRed"/>
 </Style>

我尝试通过这种样式覆盖我需要的所有属性,并且效果很好。也许 MSDN 提供的样式中缺少 trick/tweak(在网络上找到的大多数样式中都是重复的)可以解决此问题。如果有人更新我们,我们仍然很感激。

同时,我建议通过自定义来覆盖默认样式,避免使用任何全新的样式。