【问题标题】:How to find the position of an item within a ScrollViewer (ListView)?如何在 ScrollViewer (ListView) 中查找项目的位置?
【发布时间】:2016-01-07 08:07:36
【问题描述】:

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

到目前为止,我找不到任何方法来检索 ScrollViewer 中项目的位置(偏移量)。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-07
      • 2013-09-28
      • 2014-10-10
      • 2020-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多