我有带有绑定集合的GridView。我想在用户滚动GridView时捕获滚动更改事件。
如何在UWP中捕获GridView中的Scroll事件?
答案 0 :(得分:2)
您需要访问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");
}
您必须等到模板实现ScrollViewer的Loaded
事件(Page.Loaded
或GridView.Loaded
会这样做)我通常只使用Page.Loaded
一切)。
如果您需要跨多个控件执行此操作,您可能希望将其捆绑为可重用的行为。