2016-12-13 26 views

回答

1

您需要訪問GridView模板中的ScrollViewer,以便將監聽器添加到其ViewChanged事件中。

你應該始終有一個輔助方法,在你的武器庫搜索可視化樹的控制,是這樣的:

public static class ViewHelper 
{ 
    public static IEnumerable<DependencyObject> ChildrenBreadthFirst(this DependencyObject obj, bool includeSelf = false) 
    { 
     if (includeSelf) 
     { 
      yield return obj; 
     } 

     var queue = new Queue<DependencyObject>(); 
     queue.Enqueue(obj); 

     while (queue.Count > 0) 
     { 
      obj = queue.Dequeue(); 
      var count = VisualTreeHelper.GetChildrenCount(obj); 

      for (var i = 0; i < count; i++) 
      { 
       var child = VisualTreeHelper.GetChild(obj, i); 
       yield return child; 
       queue.Enqueue(child); 
      } 
     } 
    } 
} 

現在,您可以訪問的ScrollViewer像這樣(簡化代碼):

<Page Loaded="onPageLoaded"> 
    <GridView x:Name="gridView"/> 
</Page> 
private void onPageLoaded(object sender, RoutedEventArgs e) 
{ 
    var scrollViewer = gridView.ChildrenBreadthFirst().OfType<ScrollViewer>().First(); 
    scrollViewer.ViewChanged += onViewChanged; 
} 

private void onViewChanged(object sender, ScrollViewerViewChangedEventArgs e) 
{ 
    System.Diagnostics.Debug.WriteLine("Scrolled"); 
} 

您必須等到Loaded EV通過模板實現ScrollViewer(Page.LoadedGridView.Loaded可以完成),我通常只需使用Page.Loaded即可)。

如果您需要跨多個控件執行此操作,則可能需要將其捆綁爲可重用行爲。

+0

謝謝!它有幫助。 – user5979