C# WPF DataGrid在触摸屏上的ScrollIntoView无法工作

3

我尝试在WPF DataGridLoaded事件中滚动到最后选定的项。该DataGrid位于一个Tab中。在普通的Windows环境中测试时一切正常。但是,当我在平板电脑上触摸而不是点击选项卡页时,它就无法滚动到我最后选择的项。

这是我目前的代码:

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);
    }
}

我也尝试了我在这里找到的解决方案,但它没有起作用。
编辑:
为了测试目的,我完全删除了dataGrid_Loaded事件。现在我只在程序开始时将数据加载到DataGrid中。即使现在我使用鼠标点击在选项卡之间切换,它仍然保持滚动位置,但不适用于触摸!这是.NET Framework中的一个错误吗?
1个回答

8

在MSDN社区的帮助下,我成功解决了这个问题。

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

所以,最终我的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);
    }
}

我希望这能帮助到其他有同样问题的人。
供参考,这里是我的德文MSDN论坛主题,其中解决了我的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接