检测ScrollViewer何时停止滚动

时间:2014-02-05 19:13:06

标签: c# wpf scroll scrollviewer pixelsense

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

我在ManipulationScrollViewer上尝试了SurfaceListBox个事件和其他几个事件。我也尝试过ScrollViewer.PanningDeceleration老实说,我没有看到任何区别。基本上,到目前为止没有运气。

那么,即使在PreviewTouchUp中的ScrollViewer之后,如何检测滚动的结束?

2 个答案:

答案 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之间。