DataGrid ScrollBar无法正常工作

时间:2015-12-01 12:55:10

标签: wpf

我正在尝试将 ScrollViewr 保留到 datagrid ,但是当我使用向上和向下箭头时它不会滚动。但是当我尝试使用鼠标移动ScrollBar工作正常。 为什么ScrollBar在数据上下移动时没有移动。请提供宝贵的建议。这是我的代码

<DataGrid x:Name="dgsuggest" ScrollViewer.VerticalScrollBarVisibility="Auto" 
IsReadOnly="True" AutoGenerateColumns="False"ItemsSource="{Binding}" 
PreviewKeyDown="dgsuggest_PreviewKeyDown" SelectedIndex="0">

我的处理程序代码如下

    private void dgsuggest_PreviewKeyDown(object sender, KeyEventArgs e)
    {            
       if (e.Key==Key.Down)
        {
            if (dgsuggest.Items.Count - 1 > dgsuggest.SelectedIndex)
                dgsuggest.SelectedIndex++;
            e.Handled = true;
        }
        else if (e.Key == Key.Up)
        {
            if (dgsuggest.SelectedIndex > 0)
                dgsuggest.SelectedIndex--;
            e.Handled = true;
        }
    }

1 个答案:

答案 0 :(得分:0)

DataGrid不滚动的原因是因为您只是更改选择。如果要更改视图中的项目,可以在更改选择后使用DataGrid.ScrollIntoView。调用此方法并提供新选择的对象将在调整视图时移动ScrollBar。

private void dgsuggest_PreviewKeyDown( object sender, KeyEventArgs e )
    {
        var datagrid = sender as DataGrid;
        if( datagrid == null ) return;

        if( e.Key == Key.Down )
        {
            if( datagrid.Items.Count - 1 > datagrid.SelectedIndex )
                datagrid.SelectedIndex++;

            datagrid.ScrollIntoView( datagrid.SelectedItem );

            e.Handled = true;
        }
        else if( e.Key == Key.Up )
        {
            if( datagrid.SelectedIndex > 0 )
                datagrid.SelectedIndex--;

            datagrid.ScrollIntoView( datagrid.SelectedItem );

            e.Handled = true;
        }
    }

请注意,正常的Key Up和Down事件无法正常运行的原因是因为您的处理程序。将事件标记为已处理导致其不滚动。我不确定您要通过更改代码中的选定索引来完成什么,但DataGrid的默认功能已经为关键的向上和向下事件增加/减少所选索引。完全删除处理程序将为您提供与我提供的代码相同的结果。