2010-12-16 9 views
0

Verwandte Frage (Details)

Tunneling events and ContextMenuRightDoubleClick und Kontextmenü

Ich habe eine WPF-Leinwand, auf die ich ein ContextMenu assoziiert ..

Das ist cool. Jetzt habe ich eine Aktion auf der rechten Doubleclick zu implementieren ...

In der Tat habe ich nie erhalten auf der rechten Mausclickcount == 2 ...

Was ist zu tun?
Ich brauche ContextMenu auf einfache (rechts) klicken, anzuzeigen und Action2 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

Kontextmenüs in Sie sind nicht als Folge der WM_RBUTTONUP angezeigt, werden sie als Folge der WM_CONTEXTMENU angezeigt. Der Grund dafür ist, dass die Tastatur (Umschalttaste + F10 oder Kontextmenütaste) das Kontextmenü aufrufen kann. Es gibt keine Möglichkeit zu unterscheiden WM_CONTEXTMENU von Tastatur oder Maus aufgerufen wird. Wenn Sie das angegebene Verhalten wünschen, müssen Sie die Tastaturfunktionalität aufgeben. Ich empfehle dringend, das "normale" Verhalten beizubehalten und statt eines Rechts-Doppelklicks einen anderen Mechanismus wie Strg + Linksklick zu verwenden. – Tergiver

+0

@Tergiver: Danke. Siehe http://stackoverflow.com/questions/4464936/tunneling-events-and-contextmenu – serhio

+0

Ich habe die Frage nicht nahe genug gelesen. Ich habe nur angenommen, dass der Code in der ClickCount = "1" -Anweisung eine Aktion war, aber jetzt sehe ich, dass es im Grunde genommen die gleiche ist wie die Antwort, die ich zur Verfügung gestellt habe. Meine schlechte .. Gelöschte Antwort –

Antwort

0

Check out this Beispiel bei MSDN ausführen:

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

und was ......? Ich muss ContextMenu mit einem einfachen Klick anzeigen und Action2 onDoubleClick ausführen. – serhio

+0

Sie behandeln das falsche Ereignis ... –

+0

Was meinen Sie, und wie ist mit Ihrem Beispiel verknüpft? – serhio

1

MouseButtonEventArgs.ClickCount wird immer 1, da Sie behandeln ein up-Ereignis und kein down-Ereignis. PreviewUp und Up werden immer 1 sein. Das Klickverhalten wird normalerweise als das Down-Ereignis der jeweiligen Schaltfläche definiert.

+0

ok, ich habe getestet und Sie haben Grund. Irgendeine Lösungsmöglichkeit? – serhio

+0

@serhio, müssen Sie einfach nur das Ereignis ButtonDown behandeln – msarchet

+0

@serhio Verwenden Sie PreviewMouseRightButtonDown oder MouseRightButtonDown anstelle von PreviewMouseRightButtonUp –

0

diese MouseDoubleClickEvent

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

Das Problem ist, dass "MouseDoubleClick" -Ereignis nicht auf der rechten Schaltfläche ausgelöst wird, wenn ein Kontextmenü aktiv ist. – serhio