如何在 ScrollViewer (ListView) 中找到项目的位置?
How to find the position of an item within a ScrollViewer (ListView)?
我有一个 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
并且您将具有所需 object/item.
的偏移量
我有一个 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
并且您将具有所需 object/item.