Всплывающее окно WPF, захватывающее события двойного щелчка мыши - PullRequest
4 голосов
/ 30 октября 2009

В моем главном окне приложения есть элементы управления, каждый из которых открывает всплывающее окно, которое предоставляет пользователю дополнительные элементы управления.

Другие элементы управления в главном окне приложения имеют обработчики событий mousedoubleclick. Моя проблема заключается в том, что, когда пользователь дважды щелкает во всплывающем окне, элементы управления во всплывающем окне получают события mousedoubleclick.

Я попытался добавить обработчик события mousedoubleclick к родительскому элементу всплывающего окна и обработать событие, но оно все равно попадает в главное окно приложения.

    private void ParentControl_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        e.Handled = true;
    }

Я также пытался вызвать Popup.CaptureMouse () в обработчике события MouseEnter во всплывающем окне, но метод всегда завершается ошибкой (возвращает false).

    void popup_MouseEnter(object sender, MouseEventArgs e)
    {
        e.Handled = true;
        Popup popup = sender as Popup;
        bool success = popup.CaptureMouse();
    }

Существуют ли другие способы предотвращения возникновения событий мыши в главном окне приложения при открытом всплывающем окне?

1 Ответ

0 голосов
/ 04 июля 2011

Легко! Вместо использования MouseDoubleClick события элемента управления

private void myControl_MouseDoubleClick(System.Object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    MessageBox.Show("MouseDoubleClick on control");

}

используйте событие PreviewMouseDoubleClick .

private void myControl_PreviewMouseDoubleClick(System.Object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    MessageBox.Show("PreviewMouseDoubleClick on control");

}

Теперь двойной щелчок на вашем элементе управления также не вызовет родительское событие DoubleClick.

...