我分享了这个解决方案,这是其他两个解决方案的混合。抱歉,我无法为两者提供公认的解决方案。
如果我使用 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事件解决方案有效。