You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP应用中如何保留DataGrid的滚动位置?

保持UWP DataGrid刷新后的滚动位置

方案1:记录并恢复可见首项(通用场景)

这种方法不依赖行高,适配大多数情况:

  1. 获取DataGrid内部的ScrollViewer
    DataGrid的滚动控件封装在模板里,需要通过视觉树遍历获取:

    private ScrollViewer GetDataGridScrollViewer(DataGrid dataGrid)
    {
        return FindVisualChild<ScrollViewer>(dataGrid);
    }
    
    private T FindVisualChild<T>(DependencyObject parent) where T : DependencyObject
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
        {
            var child = VisualTreeHelper.GetChild(parent, i);
            if (child is T typedChild)
                return typedChild;
            
            var result = FindVisualChild<T>(child);
            if (result != null)
                return result;
        }
        return null;
    }
    
  2. 刷新前记录可见首项
    在重新加载数据前,获取当前可视区域的第一个数据项:

    var scrollViewer = GetDataGridScrollViewer(YourDataGrid);
    object firstVisibleItem = null;
    
    // 获取可视区域内的第一个容器
    var firstContainer = scrollViewer.ItemContainerGenerator.ContainerFromIndex(scrollViewer.FirstVisibleIndex) as FrameworkElement;
    if (firstContainer != null)
    {
        firstVisibleItem = YourDataGrid.ItemFromContainer(firstContainer);
    }
    
  3. 刷新后恢复滚动位置
    数据加载完成后,找到记录的项并滚动到对应位置:

    if (firstVisibleItem != null && YourDataGrid.Items.Contains(firstVisibleItem))
    {
        // 对齐到顶部,确保位置和刷新前一致
        YourDataGrid.ScrollIntoView(firstVisibleItem, ScrollIntoViewAlignment.Top);
    }
    

方案2:记录滚动偏移量(固定行高场景)

如果DataGrid的行高度固定,直接操作ScrollViewer的偏移量更高效:

// 刷新前记录垂直偏移
var scrollViewer = GetDataGridScrollViewer(YourDataGrid);
double savedOffset = scrollViewer.VerticalOffset;

// 执行数据库数据加载、更新ItemsSource操作...

// 刷新后恢复偏移
scrollViewer.ScrollToVerticalOffset(savedOffset);

关键提示

  • 若使用ObservableCollection,避免直接替换整个集合(会触发DataGrid完全重置),优先选择清空后批量添加;如果必须替换集合,再配合上述滚动恢复逻辑。
  • 确保在数据完全绑定完成后执行滚动恢复,可通过Dispatcher.RunAsync延迟一小段时间,避免因UI未更新导致找不到目标项。

内容的提问来源于stack exchange,提问作者Flarosa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 20:05:20