我有一个 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
方法。