如何检测 ScrollViewer 何时完成滚动?

How to detect when a ScrollViewer finishes scrolling?

顺便说一句,我正在使用 UWP 以防万一。 所以我使用的是 ListView,默认情况下,所有 ListView 都附加了一个 ScrollViewer(在默认模板中)。问题是我找不到在 ListView 完成滚动时触发的事件(在 ListView 本身或其 ScrollViewer 上)。

我使用 scrollViewer.ChangeView() 方法自动滚动到 ListView 的开头,它使用动画滚动到顶部,所以我认为这与它有关,因为 ViewChanged 事件在动画完成之前触发。如果我对此是正确的,那么必须有一种方法来确定动画是否完成,因为我需要在 ListView 再次完全空闲时收到警报,这仅在滚动动画完成时发生。谢谢。

您可以连接 scrollViewer 的 ViewChanged event,并检查事件参数的 IsIntermediate

private void ScrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
    if (e.IsIntermediate)
    {
        System.Diagnostics.Debug.WriteLine("scroll ongoing");
    }
    else
    {
        System.Diagnostics.Debug.WriteLine("scroll finish");
    }
}

多次触发该事件。滚动完成后,IsIntermediate 为假。