有沒有辦法檢測ScrollViwer
的ListView
處於滾動模式並停止滾動。在Windows Phone 8.1 ListView
中,我們無法獲得scrollviewer的參考。如何檢測ListView向上或向下滾動
任何人在Windows Phone 8.1 WinRT應用程序中完成它?
有沒有辦法檢測ScrollViwer
的ListView
處於滾動模式並停止滾動。在Windows Phone 8.1 ListView
中,我們無法獲得scrollviewer的參考。如何檢測ListView向上或向下滾動
任何人在Windows Phone 8.1 WinRT應用程序中完成它?
一旦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();
您可以找到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;
我正在使用IsupportIncrementalLoading擴展類來填充列表視圖,其中項目從Internet加載。在這種情況下,我如何獲得scrollviewer,因爲listview需要一些時間來填充子項。 – MohanRajNK 2015-02-01 12:20:22
@MohanRajNK問題在哪裏 - 你想達到什麼目的?正如我認爲ListView有一個滾動查看器和增量加載只是在需要時加載項目。 – Romasz 2015-02-01 13:24:48
問題是我怎樣才能得到一個scrollviewer?我在listview加載的方法中調用了getscrollviewer方法。但在那個時候,listview沒有子項目。即GetChildrenCount返回0. – MohanRajNK 2015-02-01 13:55:34
必須加載數據獲取滾動視圖前的ListView。如果listview有空行,那麼你得到的scrollview將爲空。
正如我想的,你應該接受@yasen的回答 - 他更快(3秒),編輯後有更好的方法遍歷* VisualTree *;) – Romasz 2014-12-07 09:11:10
感謝提及。我已經改變了接受的答案,再次感謝:) – 2014-12-07 09:53:12
@Romasz謝謝。一如既往,您的答案也很好。 :)只有少一點通用。 – yasen 2014-12-08 09:40:21