检测scrollviewer何时停止滚动



我有一个SurfaceListBox,其中内部具有ScrollViewer。我可以访问该ScrollViewer,我想检测滚动何时结束。由于它是一个触摸应用程序,我可以拖动它,现在我正在检测到PreviewTouchUp做我想做的事,但是,如果我像在智能手机上一样快速刷卡,因为ScrollViewer的内容是 PreviewTouchUp仍在拖动/滚动,没有反映滚动的末端,而是在之前触发。


我在ScrollViewerSurfaceListBox上尝试了Manipulation事件,还有其他几个事件。我也尝试过ScrollViewer.PanningDeceleration,老实说,我看不出有所不同。基本上,到目前为止没有运气。

那么,即使在ScrollViewer中的PreviewTouchUp之后,我如何检测滚动的末端?

您不能只处理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
}

似乎有点混乱,但是谢里丹的解决方案是我找到的最好的方法,可以确定scrollviewer何时停止移动。我只是调整了计时器间隔,更重要的是,将"//在滚动已停止" hittestvisible = false之间,然后在scrollviewer控件上hittestvisible = true。

最新更新