我的SurfaceListBox
里面有ScrollViewer
。我可以访问ScrollViewer
,我想检测滚动结束的时间。由于它是一个触摸应用程序,我可以拖动它,现在我正在检测PreviewTouchUp
做我想要的,但是,如果我做快速滑动,就像你在智能手机上做的那样,因为内容ScrollViewer
仍在拖动/滚动,PreviewTouchUp
不反映滚动结束,而是在之前触发。
我在Manipulation
和ScrollViewer
上尝试了SurfaceListBox
个事件和其他几个事件。我也尝试过ScrollViewer.PanningDeceleration
老实说,我没有看到任何区别。基本上,到目前为止没有运气。
那么,即使在PreviewTouchUp
中的ScrollViewer
之后,如何检测滚动的结束?
答案 0 :(得分:4)
你不能处理ScrollViewer.ScrollChanged
event吗?从链接页面,它说它...
在检测到滚动位置,范围或视口大小的更改时发生。
因此,每次举起活动时,你都可以开始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
}
答案 1 :(得分:0)
看起来有点乱,但Sheridan的解决方案是我能找到确定滚动查看器何时停止移动的最佳方式。我只是调整了计时器间隔,更重要的是,把#&; 34做了你现在想要滚动停止的事情"在scrollviewer控件上,hittestvisible = false和hittestvisible = true之间。