RightDoubleClick и контекстное меню - PullRequest
0 голосов
/ 16 декабря 2010

Вопрос по теме (Подробности)

Туннельные события и ContextMenu

У меня есть холст WPF, с которым я связал ContextMenu ..

Это круто. Теперь мне нужно выполнить некоторые действия на Right DoubleClick ...

На самом деле я никогда не получаю по нажатию правой кнопки мыши ClickCount == 2 ...

Что делать?
Мне нужно отобразить ContextMenu простым щелчком правой кнопки мыши и выполнить 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); } }

Ответы [ 3 ]

1 голос
/ 16 декабря 2010

MouseButtonEventArgs.ClickCount всегда будет 1, так как вы обрабатываете событие up, а не down. PreviewUp и Up всегда будут равны 1. Поведение при нажатии обычно определяется как событие down соответствующей кнопки.

0 голосов
/ 16 декабря 2010

Сделайте это в MouseDoubleClickEvent

if (e.ChangedButton == MouseButton.Right)
{
     //do something with Mouse Right Double Click
}
0 голосов
/ 16 декабря 2010

Проверьте этот пример на 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";
    }
}
...