c# WPF DataGrid ScrollIntoView不支持触摸

本文关键字:不支持 触摸 ScrollIntoView DataGrid WPF | 更新日期: 2023-09-27 18:07:05

我尝试在Loaded事件上滚动到WPF DataGrid中的最后一个选定项目。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);
    }
}

我也试过我在这里找到的解决方案,但它不起作用。

编辑:

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

c# WPF DataGrid ScrollIntoView不支持触摸

在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线程,我的问题解决了。