7

任何人都知道如何在刷新命令后保持垂直滚动位置?

我的 Datagrid 从对象列表接收绑定。

非常感谢,对不起我的英语。

4

2 回答 2

1

2个可能的解决方案:

1)尝试更新列表而不是替换它。这意味着添加新项目并删除不需要的项目。

2)您可以在刷新之前保存滚动条的状态,然后以编程方式滚动到所选项目。

WPF Toolkit:如何滚动数据网格以显示后面代码中的选定项目?

于 2013-04-12T21:10:00.747 回答
1

我有同样的问题,这是我所做的:

  1. 当它被引导时找到ScrollViewer你的Datagrid/并添加一个事件:ListBoxScrollChanged
var scrollViewer = FindScrollViewer(ListBoxOrders);
if (scrollViewer != null)
{
    scrollViewer.ScrollChanged += scrollViewer_ScrollChanged;
}
//Here is the function to find the ScrollViewer:
private ScrollViewer FindScrollViewer(DependencyObject d)
{
    if (d is ScrollViewer)
        return d as ScrollViewer;
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(d); i++)
    {
        var sw = FindScrollViewer(VisualTreeHelper.GetChild(d, i));
        if (sw != null) return sw;
    }
    return null;
}
  1. 在滚动更改时,存储垂直偏移量:
private double _verticalOffset;
private void scrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
    var sv = (ScrollViewer)sender;
    _verticalOffset = sv.VerticalOffset;
}
  1. 刷新后,滚动到上一个位置:
scrollViewer?.ScrollToVerticalOffset(_verticalOffset);
于 2019-07-04T06:34:28.547 回答