2010-12-16 40 views
0

相關問題(詳細信息)

Tunneling events and ContextMenuRightDoubleClick和上下文菜單

我有一個WPF畫布我相關的文本菜單..

這是很酷的。現在,我要實現右鍵的DoubleClick一些行動......

事實上,我從來沒有收到鼠標右鍵ClickCount的== 2 ...

怎麼辦?
我需要簡單(右)單擊顯示文本菜單,並執行措施2 OnRightDoubleClick ..

protected override void OnPreviewMouseRightButtonUp(MouseButtonEventArgs e) 
{ 
    if (e.ClickCount == 1) 
    { 
     #region SINGLE CLICK 
     stillSingleClick = true; 
     Thread thread = new Thread(
      new System.Threading.ThreadStart(
       delegate() 
       { 
        Thread.Sleep(System.Windows.Forms.SystemInformation.DoubleClickTime); 
        this.Dispatcher.Invoke(
         System.Windows.Threading.DispatcherPriority.Background, 
         new Action(
          delegate() 
          { 
           if (stillSingleClick) 
           { 
            base.OnPreviewMouseRightButtonUp(e); 
           } 
           stillSingleClick = false; 
          } 
        )); 
       } 
     )); 
     thread.Start(); 
     #endregion SINGLE CLICK 
    } 
    else if (e.ClickCount == 2) 
    { 
     stillSingleClick = false; 
     base.OnPreviewMouseRightButtonUp(e); 
    } 
} 
+0

上下文菜單不顯示爲WM_RBUTTONUP的結果爲此,他們將顯示爲WM_CONTEXTMENU的結果。原因是允許鍵盤(Shift + F10或上下文菜單鍵)調用上下文菜單。無法區分從鍵盤或鼠標調用的WM_CONTEXTMENU。如果你想要指定的行爲,你將不得不放棄鍵盤功能。我強烈建議保持「正常」行爲,而不是右鍵雙擊,使用Ctrl +左鍵單擊等其他機制。 – Tergiver 2010-12-16 18:49:01

+0

@Tergiver:謝謝。請參閱http://stackoverflow.com/questions/4464936/tunneling-events-and-contextmenu – serhio 2010-12-16 20:22:07

+0

我沒有仔細閱讀這個問題。我只是假定ClickCount =「1」語句中的代碼是一些動作,但現在我發現它與我提供的答案基本相同。我的不好..已刪除的答案 – 2010-12-16 20:40:55

回答

0

退房this在MSDN例如:

private void OnMouseDownClickCount(object sender, MouseButtonEventArgs e) 
{ 
    //Handle only right clicks 
    if (e.RightButton != MouseButtonState.Pressed) return; 

    // Checks the number of clicks. 
    if (e.ClickCount == 1) 
    { 
     // Single Click occurred. 
     lblClickCount.Content = "Single Click"; 
    } 
    if (e.ClickCount == 2) 
    { 
     // Double Click occurred. 
     lblClickCount.Content = "Double Click"; 
    } 
    if (e.ClickCount >= 3) 
    { 
     // Triple Click occurred. 
     lblClickCount.Content = "Triple Click"; 
    } 
} 
+0

和......?我需要通過簡單的點擊來顯示ContextMenu,然後執行Action2 onDoubleClick .. – serhio 2010-12-16 16:48:02

+0

您正在處理錯誤的事件... – 2010-12-16 16:49:31

+0

您是什麼意思,以及如何與您的示例鏈接? – serhio 2010-12-16 16:50:39

1

MouseButtonEventArgs.ClickCount永遠是1,因爲你正在處理up事件而不是down事件。 PreviewUp和Up都將始終爲1.點擊行爲通常定義爲相應按鈕的向下事件。

+0

好的,我測試了,你有理由。任何解決方案 – serhio 2010-12-16 17:04:13

+0

@serhio,你只需要處理ButtonDown事件而不是 – msarchet 2010-12-16 17:24:13

+0

@serhio使用PreviewMouseRightButtonDown或MouseRightButtonDown代替PreviewMouseRightButtonUp – 2010-12-16 17:24:14

0

MouseDoubleClickEvent

if (e.ChangedButton == MouseButton.Right) 
{ 
    //do something with Mouse Right Double Click 
} 
+0

問題在於如果上下文菜單處於活動狀態,則不會在右按鈕上引發「MouseDoubleClick」事件。 – serhio 2010-12-20 13:19:27