如何支持MouseUp,MouseDown和MouseMove事件,无论使用Mouse还是Touch

时间:2019-04-29 13:19:08

标签: c# wpf events touch mouse

我正在尝试制作一个同时支持Mouse和Touch的WPF应用程序。在开发过程中,我只使用了Mouse,但是在通过触摸屏进行测试之后,我遇到了一些特定的问题。在发生鼠标按下事件时,我正在启动DispatcherTimer,当DispatcherTimer滴答时,将执行一些重要的代码。但是,问题在于在MouseUp上我正在停止计时器,因为用户必须按住它直到计时器计时。使用触摸设备时,即使实际上尚未抬起手指,也会在MouseDown事件后立即触发MouseUp事件。如何避免这种情况而又不改变我的代码太多?

我尝试处理Preview事件。我尝试了在类似的已报告问题中发现的粘贴粘贴助手类。我尝试了“ Stylus.IsPressAndHoldEnabled”属性。我记得我最后尝试过的事情是同时附加Touch事件和Mouse事件并将它们发送到同一位置。(请注意,您必须检查MouseEventArgs的'StylusDevice'属性,但即使在使用触摸屏。.)无论如何,我仍然无法用我尝试过的任何东西对其进行破解。.

我没有上面已经解释过的所有代码,但是至少这是我目前正在坐的东西。

protected override void OnPreviewMouseMove(MouseEventArgs e) {
  Log.AddEntry("__________ Dashboard : OnPreviewMouseMove");
  InputMove(e);// my Move handling
}


protected override void OnPreviewMouseDown(MouseButtonEventArgs e) {
  Log.AddEntry("__________ Dashboard : OnPreviewMouseDown");
  InputDown(e); // my Down handling
  e.Handled = true;
}


protected override void OnPreviewMouseUp(MouseButtonEventArgs e) {
  Log.AddEntry("__________ Dashboard : OnPreviewMouseUp");
  InputUp(e); // my Up handling
}

最后我可以提供的是我在测试中创建的日志。您将能够看到Up事件在Down事件之后不久触发。 以下日志在触摸屏上创建。在日志开始时,我将手指放在屏幕上,我认为自从日志停止记录以来,一定要经过一秒钟,我才能抬起手指。

29.04.2019 15:10:02: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:10:02: __________ Dashboard : OnPreviewMouseDown
29.04.2019 15:10:02: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:10:02: __________ Dashboard : TIMER STARTED
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseUp
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:10:03: __________ Dashboard : TIMER STOPPED
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseDown
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:10:03: __________ Dashboard : TIMER STARTED
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseUp
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:10:03: __________ Dashboard : TIMER STOPPED
29.04.2019 15:10:03: __________ Dashboard : OnPreviewMouseMove

以下日志是使用鼠标创建的(相同的过程,请注意Down和Up事件之间的间隔为3秒。DispatcherTimerTick事件已正确触发,与使用Touch时不同):

29.04.2019 15:15:47: __________ Dashboard : OnPreviewMouseDown
29.04.2019 15:15:47: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:15:47: __________ Dashboard : TIMER STARTED
29.04.2019 15:15:50: __________ Dashboard : OnPreviewMouseUp
29.04.2019 15:15:50: __________ Dashboard : OnPreviewMouseMove
29.04.2019 15:15:50: __________ Dashboard : TIMER STOPPED

0 个答案:

没有答案