DataGrid ScrollViewer无法正常工作

时间:2015-12-10 09:34:22

标签: c# wpf xaml visual-studio-2013 scrollviewer

无法使用键盘箭头键滚动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;
}

1 个答案:

答案 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来确保滚动查看器具有焦点。