当我想要双击时如何避免点击?

我在WPF中有一个应用程序和一个按钮。 在这个buttun中,我想要实现代码的click事件,但我希望当用鼠标双击时,执行其他代码但不执行click事件的代码。

问题是click事件的代码总是被执行,我不知道当我做doulbe点击时是否有办法避免执行click事件。

我遵循MVVM模式,并使用MVVM灯将事件转换为命令。

谢谢。

在处理MouseDoubleClick事件后,将RoutedEvent的e.Handled设置为True,以阻止被触发的第二次单击事件。

如果要阻止第一次单击事件行为,可以使用计时器:

 private static DispatcherTimer myClickWaitTimer = new DispatcherTimer( new TimeSpan(0, 0, 0, 1), DispatcherPriority.Background, mouseWaitTimer_Tick, Dispatcher.CurrentDispatcher); private void Button_MouseDoubleClick(object sender, MouseButtonEventArgs e) { // Stop the timer from ticking. myClickWaitTimer.Stop(); Trace.WriteLine("Double Click"); e.Handled = true; } private void Button_Click(object sender, RoutedEventArgs e) { myClickWaitTimer.Start(); } private static void mouseWaitTimer_Tick(object sender, EventArgs e) { myClickWaitTimer.Stop(); // Handle Single Click Actions Trace.WriteLine("Single Click"); } 

在点击事件中,您可以检查EventArgs中的点击次数,例如;

 private void RightClickDown(object sender, MouseButtonEventArgs e) { if (e.ClickCount == 1) { //do single click work here. } if (e.ClickCount == 2) { //do double click work. } } 

这意味着您可以手动区分单击和双击,如果这是您想要的。

这是一个很好的解释,如何区分点击和双击。 它为您提供了如何实现这一目标的2个示例。

我分享了这个解决方案,这是另外两个解决方案的混合。 对不起,我无法给出两者都能接受的解决方案。

如果我使用PreviewMouseLeftButtonDown来控制何时单击或双击工作,而不是使用两个事件(单击和双击)。

所以我用这段代码解决了这个问题:

第一种方法用鼠标控制点击。

 private void MouseLeftButtonDownCommand(MouseButtonEventArgs e) { if (e.ClickCount == 1) { _dtMouseClick.Start(); } else if(e.ClickCount > 1) { _dtMouseClick.Stop(); //the code of the double click } } 

此方法是链接到DispatcherTimer的方法,如果第二次单击鼠标时未停止,则执行该方法。

 private void MouseClick_Tick(object sender, System.EventArgs e) { _dtrMouseClick.Stop(); //code of the single click } 

dispatcherTimer是在视图模型的构造函数中创建的

 _dtBotonBuscarMouseClick = new System.Windows.Threading.DispatcherTimer( new TimeSpan(0, 0, 0, 0, 250), System.Windows.Threading.DispatcherPriority.Background, MouseClick_Tick, System.Windows.Threading.Dispatcher.CurrentDispatcher); _dtMouseClick.Stop(); 

间隔为250毫秒,即用户必须双击的时间间隔。

在这个解决方案中,我使用相同的方法来停止dispatcherTimer,stop()方法,但由于某种原因,如果我使用这两个事件(click和mouseDoubleClick),则双击时dispatcherTimer不会停止,如果我使用MouseLeftButtonDown事件解决方案有效。