检测ScrollViewer何时停止滚动

Sch*_*Box 1 c# wpf scroll scrollviewer pixelsense

我有一个SurfaceListBox里面有一个ScrollViewer。我可以访问它,ScrollViewer并且我想检测滚动结束的时间。由于它是一个触摸应用程序,可以拖动它,因此,我现在正在检测到PreviewTouchUp要执行的操作,但是,如果像我在智能手机上那样快速滑动,因为的内容ScrollViewer仍在拖动/ scrolling,PreviewTouchUp不会反映滚动结束,而是在之前触发。

我曾尝试Manipulation事件和其他几个人同时在ScrollViewerSurfaceListBox。我也尝试过ScrollViewer.PanningDeceleration,说实话,我看不出有什么不同。到目前为止,基本上没有运气。

因此,即使在PreviewTouchUp中,我也如何检测滚动的结束ScrollViewer

She*_*dan 5

您不能只处理ScrollViewer.ScrollChanged事件吗?在链接页面上,它说...

当检测到滚动位置,范围或视口大小发生更改时发生。

因此,DispatcherTimer每次事件引发时,您都可以开始等待片刻,例如。在滚动时。当滚动停止并且事件不再引发时,Tick将调用处理程序,并且您可以在其中执行任何操作。尝试这样的事情:

DispatcherTimer timer = new DispatcherTimer();
timer.Interval = new TimeSpan(0, 0, 0, 0, 250);
timer.Tick += Timer_Tick;

...

private void ScrollChanged(object sender, ScrollChangedEventArgs e)
{
    if (timer.IsEnabled) timer.Stop();
    timer.Start();
}

private void Timer_Tick(object sender, EventArgs e)
{
    timer.Stop();
    // Do what you want now that scrolling has stopped
}
Run Code Online (Sandbox Code Playgroud)