任何人都知道如何在刷新命令后保持垂直滚动位置?
我的Datagrid从对象列表中接收绑定。
非常感谢,对不起我的英语。
答案 0 :(得分:0)
2个可行的解决方案:
1)尝试更新列表而不是替换它。它意味着添加新项目并删除您不需要的项目。
2)您可以在刷新前保存滚动条的状态,然后将程序滚动到所选项目。
WPF Toolkit: how to scroll datagrid to show selected item from code behind?
答案 1 :(得分:0)
我遇到了同样的问题,这是我所做的: 1.在您的数据网格/列表框处于引导状态时,找到它的滚动查看器,并添加一个scrollchanged事件。
var scrollViewer = FindScrollViewer(ListBoxOrders);
if (scrollViewer != null)
{
scrollViewer.ScrollChanged += scrollViewer_ScrollChanged;
}
以下是查找滚动查看器的功能:
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;
}
更改滚动时,存储垂直偏移
private double _verticalOffset;
private void scrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
var sv = (ScrollViewer)sender;
_verticalOffset = sv.VerticalOffset;
}
刷新后,滚动到上一个位置
scrollViewer?.ScrollToVerticalOffset(_verticalOffset);