2010-11-11 87 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