2010-11-11 69 views
1

我有一个用户控件,其中我想在单击与双击的情况下做一些不同的事情。我处理MouseLeftButtonDown事件本身:忽略单击WPF

private void cueCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     switch (e.ClickCount) 
     { 
      case 1: 
       { 
        cueCanvas.Focus(); 
        e.Handled = true; 
        _mouseStartPoint = Mouse.GetPosition(null); 
        break; 
       } 
      case 2: 
       { 
        double pos = Mouse.GetPosition(cueCanvas).X; 
        TimeSpan time = ConvertFromPosition(pos); 
        AddNewEvent(time); 
        e.Handled = true; 
        break; 
       } 
     } 
    } 

的问题是,WPF并不真正关心你有多少次点击鼠标,所以我得到的第一个点击事件,即使我即将得到第二个(在双击的情况下)。有没有人想出了解决这个问题的方法?我意识到我可以尝试变得聪明,并设置一些定时器,以便在第二次点击进入时我第一次点击被“取消”(我意识到这是框架将会做的事情)。如果这是唯一的答案,有谁知道我们如何查询系统适当的点击延迟?

回答

0

据我所知,真的没有办法做到这一点。问题在于你在与现实战斗。 :-)实际上,有两次点击进行双击。如果紧接着双击,您希望忽略单击。

您需要稍等一段时间才能看到是否有第二次点击。您可以使用WinForms中的SystemInformation类查询该时间间隔,或直接调用Win32 API

+0

那么我会说这不是没有先例。尝试双击Windows文件管理器中的文件,并查看它是否也每次都重命名它。 – Jeff 2010-11-11 20:57:13

+0

但是,感谢SystemInformation提示。这实际上是我最终使用的。如果没有人有更好的想法,我会发布代码... – Jeff 2010-11-11 20:57:57

+1

哦,是的,这是一些人需要的场景,毫无疑问,它有优先权。我只是说,这有点像对抗系统 - 你必须等待一两秒才能确认没有双击。您会注意到Windows资源管理器在重命名该文件之前会等待一会儿。无论如何,祝你好运。 – 2010-11-11 22:56:33