无法使用键盘箭头键滚动DataGrid
中的数据。
与ScrollViewer_KeyDown
一起使用时,Grid
事件正常工作,但在与datagrid默认ScrollViewer
一起使用时无法调用。
<DataGrid.Resources>
<Style TargetType="ScrollViewer">
<Setter Property="VerticalScrollBarVisibility" Value="Auto"/>
<EventSetter Event="KeyDown" Handler="ScrollViewer_KeyDown"></EventSetter>
</Style>
</DataGrid.Resources>
代码
private void ScrollViewer_KeyDown(object sender, KeyEventArgs e)
{
if (e.Handled) return;
var temporaryEventArgs =
new KeyEventArgs(e.KeyboardDevice, e.InputSource, e.Timestamp, e.Key)
{
RoutedEvent = e.RoutedEvent
};
// This line avoids it from resulting in a stackoverflowexception
if (sender is ScrollViewer) return;
((ScrollViewer)sender).RaiseEvent(temporaryEventArgs);
e.Handled = temporaryEventArgs.Handled;
}
答案 0 :(得分:0)
这有效:
<Grid FocusManager.FocusedElement="{Binding ElementName=MyScrollViewer}">
<ScrollViewer x:Name="MyScrollViewer" VerticalScrollBarVisibility="Auto">
<DataGrid ItemsSource="{Binding MyCollection}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
</DataGrid>
</ScrollViewer>
</Grid>
无需处理任何事件。关键是通过设置FocusManager.FocusedElement来确保滚动查看器具有焦点。