2009-10-29 6 views
4

В моем основном окне приложения есть элементы управления, каждый из которых открывает всплывающее окно, которое предоставляет пользователю больше элементов управления.WPF popup capture mouse doubleclick events

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

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

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

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

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

Есть ли какие-либо другие способы, чтобы предотвратить события мыши от стрельбы в главном окне приложения, когда всплывающее окно открыто?

+0

Джим, я не мог воспроизвести вашу проблему. Просто чтобы уточнить, когда вы упоминаете всплывающее окно, это новая форма окна или это элемент управления в главном окне, изменяющий его видимость от Скрытого/Коллапса до видимого. –

+0

По всплывающему окну я имею в виду класс Popup. См. Http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.popup.aspx – 2009-11-02 20:20:01

+0

, на какой элемент управления вы устанавливаете обработчик событий? – thumbmunkeys

ответ

-1

Легко! Вместо использования элемента управления 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.

+0

Этот ответ не отражает желание OP захватить событие DoubleClick во всплывающем окне, а не под ним. –