Подкачка сетки данных Wpf с заданным значением прокрутки в пикселях и значением табуляции false для ячеек

#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 метод в соответствии с вашими требованиями.