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

时间:2015-10-09 11:30:20

标签: c# windows windows-phone-8 windows-phone-8.1 windows-phone

我有一个ListView,我想找到特定项目的偏移量,以便稍后我可以将它放在我的listView上,滚动到相应的垂直偏移。

到目前为止,我发现无法检索ScrollViewer中项目的位置(偏移量)。

1 个答案:

答案 0 :(得分:0)

有一种方法可以在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获取verticalOffset,或者如果您正在处理水平ScrollViewer,则应该访问positionInScrollViewer.X并且您将拥有所需对象/项目的偏移量。