c# – 如何检测MouseWheel事件在WPF中结束

前端之家收集整理的这篇文章主要介绍了c# – 如何检测MouseWheel事件在WPF中结束前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我滚动鼠标滚轮时,会触发几个MouseWheel事件.我正在使用这些事件来扩展一些图像.

我想在一系列MouseWheel事件结束时调用一个方法.我怎么知道他们什么时候结束?

这是我到目前为止的实施

  1. private void ModelWindowBorder_MouseWheel(object sender,MouseWheelEventArgs e)
  2. {
  3.  
  4. intervaltimer = null;
  5.  
  6. // Do stuff like zooming and etc
  7.  
  8. CheckEventInterval()
  9.  
  10. }
  11.  
  12. private void CheckEventInterval()
  13. {
  14. intervaltimer = new Stopwatch();
  15. intervaltimer .Start();
  16. if (intervaltimer.ElapsedMilliseconds > 50)
  17. {
  18. // Do some other stuff
  19. }
  20. }

解决方法

实际上,由于摩擦轮旋转是无止境的,因此没有特殊事件来通知使用的结束滚动.但是在您的情况下,您可以测试用户是否在短时间内停止滚动.这可以通过一个简单的计时器来完成:
  1. //Use dispatcher timer to avoid problems when manipulating UI related objects
  2. DispatcherTimer timer;
  3. float someValue = 0;
  4.  
  5. public MainWindow()
  6. {
  7. InitializeComponent();
  8.  
  9. timer = new DispatcherTimer();
  10. timer.Tick += timer_Tick;
  11. timer.Interval = TimeSpan.FromMilliseconds(500 /*Adjust the interval*/);
  12.  
  13.  
  14. MouseWheel += MainWindow_MouseWheel;
  15. }
  16.  
  17. void timer_Tick(object sender,EventArgs e)
  18. {
  19. //Prevent timer from looping
  20. (sender as DispatcherTimer).Stop();
  21.  
  22. //Perform some action
  23. Console.WriteLine("Scrolling stopped (" + someValue + ")");
  24.  
  25. //Reset for futher scrolling
  26. someValue = 0;
  27. }
  28.  
  29. void MainWindow_MouseWheel(object sender,MouseWheelEventArgs e)
  30. {
  31. //Accumulate some value
  32. someValue += e.Delta;
  33.  
  34. timer.Stop();
  35. timer.Start();
  36. }

如您所见,MouseWheel事件将启动计时器.如果在计时器触发时发生新的MouseWheel事件,它将重新启动计时器.这样,只有在特定间隔内没有车轮事件时,定时器才会触发.

猜你在找的C#相关文章