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

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

我有一个 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 并且您将获得所需对象/项目的偏移量。

关于c# - 如何在 ScrollViewer (ListView) 中找到项目的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33037186/

相关文章:

c# - 无法对空引用执行运行时绑定(bind)。 ViewBag.Title 为空

java - 使用 Xfinium.Graphics 在 PDF 文档上渲染椭圆形

windows - Windows 10 下多核处理器上的 QueryPerformanceCounter 行为不稳定

css - Windows Phone 8 视口(viewport)问题

c# - 如何在 C# 中存储对整数的引用?

c# - 数据绑定(bind)不适用于我的依赖属性

python - 使用另一个目录中的函数/类

windows - 设置 SVN 服务器?

c# - 在 Windows Phone 中根据颜色裁剪图像的边框

javascript - 如何在 Windows Phone 8.1 应用程序中在 C# 和 Javascript 之间传递数据或通信