如何在ScrollViewer (ListView)中找到项目的位置
本文关键字:项目 位置 ScrollViewer ListView | 更新日期: 2023-09-27 18:16:51
我有一个ListView,我想找到一个特定项目的偏移量,这样我就可以在我的ListView中居中,滚动到相应的垂直偏移量
到目前为止,我还没有找到在ScrollViewer中检索项目位置(偏移量)的方法。
有一种方法可以在ScrollViewer中查找项目位置(偏移量)。
如果你在ListView中寻找项目偏移量,你首先必须在ListView中获得ScrollViewer:
ScrollViewer scrollViewer = GetScrollViewer(MyListView);
public static ScrollViewer GetScrollViewer(DependencyObject depObj)
{
var obj = depObj as ScrollViewer;
if (obj != null) return obj;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
var child = VisualTreeHelper.GetChild(depObj, i);
var result = GetScrollViewer(child);
if (result != null) return result;
}
return null;
}
这样您就可以访问ScrollViewer。如果你在ListView中有一组项目,你还必须获得关于该项目的容器(FrameworkElement)。
var container = MyListView.ContainerFromItem(myItemInListView);
如果你已经有了你的容器,你可以继续下面的代码:
FrameworkElement element = container as FrameworkElement;
if (element != null)
{
var transform = element.TransformToVisual(viewer);
var positionInScrollViewer = transform.TransformPoint(new Point(0, 0));
}
positionInScrollViewer
对象将是一个点,所以你可以通过访问positionInScrollViewer.Y
来获得垂直偏移量,或者如果你正在处理一个水平ScrollViewer,你应该访问positionInScrollViewer.X
,你将获得所需对象/项目的偏移量。