如何检测ListView何时到达和结束在Windows 10通用应用程序开发

本文关键字:结束 Windows 10通 应用程序开发 何检测 检测 何时 ListView | 更新日期: 2023-09-27 18:01:30

我遵循这个链接检测WPF列表视图滚动条何时在底部?
但滚动条。滚动不存在的ListView在Windows 10 ..如何在Windows 10中实现此要求

谢谢

如何检测ListView何时到达和结束在Windows 10通用应用程序开发

使用这里描述的方法如何检测到达ScrollViewer项目的结束(Windows 8)?

如果你想要增量加载,有一个内置的解决方案。否则,在模板中遍历scrollviewer对象的可视树。

只需检测ScrollViewerVerticalOffsetScrollableHeight即可。下面是我的简单代码:

XAML:

<!--Apply ScrollViwer over the ListView to detect scrolling-->
<ScrollViewer Name="ContentCommentScroll" Grid.Row="2"
              ViewChanged="ContentCommentScroll_ViewChanged" ScrollViewer.VerticalScrollBarVisibility="Auto"
              ScrollViewer.HorizontalScrollMode="Disabled" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
                <!--My Dynamic ListView-->
               <ListView Name="MyDataList" ItemsSource="{Binding MyList}" 
                            ItemTemplate="{StaticResource MyDataTemplate}"
                            ItemContainerStyle="{StaticResource myStyle}"/>
</ScrollViewer>

和代码在其XAML.CS:

// Hold ScrollViwer
public ScrollViewer listScrollviewer = new ScrollViewer();
// Binded event, which will trigger on scrolling of ScrollViewer
private void ContentCommentScroll_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
    Scrolling(ContentCommentScroll);
}
private void Scrolling(DependencyObject depObj)
{
    ScrollViewer myScroll= GetScrollViewer(depObj);
    // Detecting if ScrollViewer is fully vertically scrolled or not
    if (myScroll.VerticalOffset ==  myScroll.ScrollableHeight)
    {
        // ListView reached at of its end, when you are scrolling it vertically.
        // Do your work here here 
    }
}
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;
}

您也可以应用类似的逻辑来检测ListView Horizontally是否到达其结束

您可以用ScrollViewer包装它并命名它。然后你可以使用其他方法