6

有沒有辦法檢測ScrollViwerListView處於滾動模式並停止滾動。在Windows Phone 8.1 ListView中,我們無法獲得scrollviewer的參考。如何檢測ListView向上或向下滾動

任何人在Windows Phone 8.1 WinRT應用程序中完成它?

+1

正如我想的,你應該接受@yasen的回答 - 他更快(3秒),編輯後有更好的方法遍歷* VisualTree *;) – Romasz 2014-12-07 09:11:10

+0

感謝提及。我已經改變了接受的答案,再次感謝:) – 2014-12-07 09:53:12

+1

@Romasz謝謝。一如既往,您的答案也很好。 :)只有少一點通用。 – yasen 2014-12-08 09:40:21

回答

6

一旦ListView控件是Loaded你可以得到ScrollViewer這樣的:

var sv = (ScrollViewer)VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(this.ListV, 0), 0); 

編輯

由於Romasz建議,一旦你的ScrollViewer,你可以使用它ViewChanged事件,監控當它滾動和停止時。

而且,這裏就是我使用遍歷可視樹的通用擴展方法:

// The method traverses the visual tree lazily, layer by layer 
// and returns the objects of the desired type 
public static IEnumerable<T> GetChildrenOfType<T>(this DependencyObject start) where T : class 
{ 
    var queue = new Queue<DependencyObject>(); 
    queue.Enqueue(start); 

    while (queue.Count > 0) { 
     var item = queue.Dequeue(); 

     var realItem = item as T; 
     if (realItem != null) { 
      yield return realItem; 
     } 

     int count = VisualTreeHelper.GetChildrenCount(item); 
     for (int i = 0; i < count; i++) { 
      queue.Enqueue(VisualTreeHelper.GetChild(item, i)); 
     } 
    } 
} 

要使用此methos得到ScrollViewer,這樣做:

var sv = yourListView.GetChildrenOfType<ScrollViewer>().First(); 
4

您可以找到ScrollViewer您的ListView使用VisualTreeHelper。例如像這樣:

// method to pull out a ScrollViewer 
public static ScrollViewer GetScrollViewer(DependencyObject depObj) 
{ 
    if (depObj is ScrollViewer) return depObj as ScrollViewer; 

    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您可以訂閱其事件:

GetScrollViewer(yourListView).ViewChanged += yourEvent_ViewChanged; 
+0

我正在使用IsupportIncrementalLoading擴展類來填充列表視圖,其中項目從Internet加載。在這種情況下,我如何獲得scrollviewer,因爲listview需要一些時間來填充子項。 – MohanRajNK 2015-02-01 12:20:22

+0

@MohanRajNK問題在哪裏 - 你想達到什麼目的?正如我認爲ListView有一個滾動查看器和增量加載只是在需要時加載項目。 – Romasz 2015-02-01 13:24:48

+0

問題是我怎樣才能得到一個scrollviewer?我在listview加載的方法中調用了getscrollviewer方法。但在那個時候,listview沒有子項目。即GetChildrenCount返回0. – MohanRajNK 2015-02-01 13:55:34

-1

必須加載數據獲取滾動視圖前的ListView。如果listview有空行,那麼你得到的scrollview將爲空。

相關問題