簡體   English   中英

如何在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來獲取verticalOffset,或者,如果您正在處理水平ScrollViewer,則應該訪問positionInScrollViewer.X ,您將獲得所需對象/項目的偏移量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM