#c# #wpf #datagrid
#c# #wpf #сетка данных
Вопрос:
У меня есть WPF datagrid, в котором у меня отключены вкладки в ячейках, а блок прокрутки панели виртуализации установлен на пиксель. При нажатии 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>
Ответ №1:
Если вы взглянете на исходный код для DataGrid
, вы увидите, что он обрабатывает KeyDown
событие для PageDown
ключа определенным образом, только когда для ScrollUnit
него установлено значение Item
: https://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Controls/DataGrid.cs,1e8d30484d9b09db,references
Итак, если вы хотите, чтобы это сработало, вам придется создать подкласс DataGrid
класса и переопределить OnKeyDown
метод, чтобы обеспечить свою собственную PageDown
функциональность. Вы можете «украсть» и изменить частный OnPageUpOrDownKeyDown
метод в соответствии с вашими требованиями.