如何在WPF4 DataGrid中使用分组在水平滚动期间摆脱显示损坏?

Dmi*_*try 5 wpf xaml wpfdatagrid

我正在尝试使用分组创建数据网格,并且在水平滚动期间我得到显示损坏(空白区域).只有在定义了GroupStyle.ContainerStyle时才会出现此问题.数据网格应包含200行或更多行以重现问题.

UPDATE2: 相关的Microsoft Connect反馈.

更新:social.msdn.com的 微软人员指出,添加分组会关闭数据网格虚拟化.可能这是问题的根源.我从我的样本中删除了分组并设置VirtualizingStackPanel.IsVirtualizingfalse并完全相同的腐败.

代码重现问题:

<DataGrid ItemsSource="{Binding Source={StaticResource ResourceKey=cvsGoods}}"
          CanUserAddRows="False" CanUserReorderColumns="False"
          CanUserDeleteRows="False" CanUserResizeRows="False"
          CanUserSortColumns="False" AutoGenerateColumns="True">
    <DataGrid.GroupStyle>
        <GroupStyle>
            <GroupStyle.ContainerStyle>
                <Style TargetType="{x:Type GroupItem}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type GroupItem}">
                                <ItemsPresenter  />
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </GroupStyle.ContainerStyle>
        </GroupStyle>
    </DataGrid.GroupStyle>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

在几个水平滚动向右和向后返回左侧空白区域出现在左侧.我试过WinXP和Win7.

问题是:如何摆脱那个bug?有没有解决方法?有什么建议?

截图说明了问题:

显示损坏

pub*_*cgk 1

我们曾经遇到过同样的问题(但原因不同),即数据网格在某些行的第一列之前会有空白区域。当时我们解决(黑客)这个问题的方法是禁用行标题(不知道它是如何解决问题的,但确实发现空白区域实际上是行标题)。

我们通过将宽度设置为零来禁用(正确的单词将使其大小为零)行标题,如下代码所示:

<wpftk:DataGrid>
...
...
<wpftk:DataGrid.RowHeaderStyle>
    <Style  TargetType="wpftk:DataGridRowHeader" >
        <Setter Property="Width" Value="0" />
        <Setter Property="MaxWidth" Value="0" />
    </Style>
</wpftk:DataGrid.RowHeaderStyle>
...
...
</wpftk:DataGrid>
Run Code Online (Sandbox Code Playgroud)

让我知道它是否适合您的情况。

我们注意到的另一件事是,如果我们禁用虚拟化或 rowheaderstyle,它将解决我们的问题。我们尝试禁用行标题,因为我们不需要它。