【问题标题】:C# WPF DataGrid ScrollIntoView not working with touchC# WPF DataGrid ScrollIntoView 不能使用触摸
【发布时间】:2015-08-10 09:10:38
【问题描述】:

我尝试在 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);
    }
}

我也尝试了找到here 的解决方案,但没有奏效。

编辑:

出于测试目的,我完全删除了dataGrid_Loaded 事件。现在我只在程序开始时将数据加载到DataGrid。即使是现在,当我使用鼠标clicks 而不是touch 在标签之间切换时,它仍然保持滚动位置!这是 .NET Framework 中的错误吗?

【问题讨论】:

    标签: c# wpf datagrid touch


    【解决方案1】:

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

    我希望这能帮助遇到同样问题的其他人。

    供参考 here 是我的德国 MSDN 线程,我的问题在其中得到了解决。

    【讨论】:

      猜你喜欢
      • 2013-08-03
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      • 2017-02-03
      相关资源
      最近更新 更多