如何在ScrollViewer (ListView)中找到项目的位置

本文关键字:项目 位置 ScrollViewer ListView | 更新日期: 2023-09-27 18:16:51

我有一个ListView,我想找到一个特定项目的偏移量,这样我就可以在我的ListView中居中,滚动到相应的垂直偏移量

到目前为止,我还没有找到在ScrollViewer中检索项目位置(偏移量)的方法。

如何在ScrollViewer (ListView)中找到项目的位置

有一种方法可以在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,你将获得所需对象/项目的偏移量。