2016-12-13 18 views

答えて

1

ViewChangedイベントにリスナーを追加するには、GridViewのテンプレート内のScrollViewerにアクセスする必要があります。

あなたはいつも、制御のためのビジュアルツリーを検索するためにあなたの武器でのようなものヘルパーメソッドを持っている必要があります。

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の(簡略化されたコード)にアクセスすることができた:

あなたは Loaded EVまで待たなければなりません
<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"); 
} 

テンプレートでScrollViewerを実現するにはPage.LoadedまたはGridView.Loadedのいずれかを使用します(通常はすべてPage.Loadedを使用します)。

複数のコントロール間でこれを行う必要がある場合は、これを再利用可能な動作にバンドルするとよいでしょう。

+0

ありがとうございます!それは助けました。 – user5979

関連する問題