0
バインドされたコレクションを持つGridViewがあります。私は、ユーザーがGridViewをスクロールするときにスクロールチェンジイベントを取得したいUWPのGridViewでスクロールイベントをキャプチャする方法
UWPのGridViewでスクロールイベントをキャプチャする方法は?
バインドされたコレクションを持つGridViewがあります。私は、ユーザーがGridViewをスクロールするときにスクロールチェンジイベントを取得したいUWPのGridViewでスクロールイベントをキャプチャする方法
UWPのGridViewでスクロールイベントをキャプチャする方法は?
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
を使用します)。
複数のコントロール間でこれを行う必要がある場合は、これを再利用可能な動作にバンドルするとよいでしょう。
ありがとうございます!それは助けました。 – user5979