C#WPF DataGrid ScrollIntoView无法使用touch

时间:2015-08-10 09:10:38

标签: c# wpf datagrid touch

我尝试滚动到DataGrid事件的WPF Loaded中的最后一个选定项目。 DataGrid位于Tab。当我在普通的Windows环境中测试时,一切正常。但是,只要我在平板电脑上触摸 TabPage而不是点击它,它就不会滚动到我上次选择的项目。 到目前为止,这是我的代码:

private void dataGrid_Loaded(object sender, RoutedEventArgs e)
{
    var currentItem = dataGrid.SelectedItem;

    dataGrid.ItemsSource = sh.GetDataTable(<SQL Select statement>).DefaultView;

    if (!(currentItem == null))
    {
        dataGrid.ScrollIntoView(currentItem);
    }
}

我也尝试过我找到here的解决方案,但它没有用。

修改

出于测试目的,我完全删除了dataGrid_Loaded事件。现在我只在程序开始时将数据加载到DataGrid。即使是现在,当我使用鼠标点击切换选项卡时,它会保持滚动位置,但不会使用触摸!这是.NET Framework中的错误吗?

1 个答案:

答案 0 :(得分:2)

在MSDN社区的帮助下,我能够解决问题。

我必须滚动到DataGrid的末尾,执行UpdateLayout(),然后滚动到我想要的Item。 另外,我不能每次都设置ItemsSource,因为我之前保存的Item不再是Item的有效DataGrid

所以最后我的dataGrid_Loaded方法看起来像这样:

private void dataGrid_Loaded(object sender, RoutedEventArgs e)
{
    object currentPos = dataGrid.SelectedItem;

    if (dataGrid.ItemsSource == null)
    {
        dataGrid.ItemsSource = sh.GetDataTable("<SQL query>").DefaultView;
    }
    else
    {
        dataGrid.Items.Refresh();
    }

    if (currentPos != null)
    {
        dataGrid.ScrollIntoView(dataGrid.Items[dataGrid.Items.Count - 1]);
        dataGrid.UpdateLayout();
        dataGrid.ScrollIntoView(currentPos);
    }
}

我希望这可以帮助那些遇到同样问题的人。

供参考here是我的德语MSDN主题,我的问题已解决。