[英]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
來獲取verticalOffset,或者,如果您正在處理水平ScrollViewer,則應該訪問positionInScrollViewer.X
,您將獲得所需對象/項目的偏移量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.