WPF 数据网格向下分页,滚动设置为像素,单元格的制表位设置为 false



我有一个 WPF 数据网格,其中我在单元格上禁用了制表符,并将虚拟化面板滚动单元设置为像素。当我按 PgDn 时,所选项目不会更改,因此页面向下滚动无法正常工作。

将虚拟化面板滚动单元的单元格制表位更改为 true,使页面向下滚动回正常状态。

为什么会这样,是否可以在修复页面向下滚动时保留这两种设置?

<Window.Resources>
    <Style TargetType="DataGridCell">
        <Setter Property="IsTabStop" Value="False" />
    </Style>
</Window.Resources>
<Grid>
    <DataGrid ItemsSource="{Binding Items}"
              VirtualizingPanel.ScrollUnit="Pixel">
    </DataGrid>
</Grid>

如果你看一下DataGrid的源代码,你会发现它只在ScrollUnit设置为Item时以某种方式处理PageDown键的KeyDown事件 https://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Controls/DataGrid.cs,1e8d30484d9b09db,references:

因此,如果要使其正常工作,则必须对DataGrid类进行子类化并重写OnKeyDown方法以提供自己的自定义PageDown功能。您可以根据需要"窃取"和修改私有OnPageUpOrDownKeyDown方法。

最新更新