Можно ли проверить, когда пользователь нажал вне модального окна? Я бы хотел как-то обойти модальную логику, потому что, если окно не отображается как модальное, оно не будет отображаться поверх активного окна, и пока это единственный способ отобразить его правильно. Я не нашел подходящего способа сделать это (поскольку событие «деактивировать» больше не будет срабатывать ..)Перехват WPF за пределами модального окна
ответ
Даже если это модальное окно (отображается с ShowDialog()
вызовов), можно добавить некоторые даже обработчики класса окна и сделать его проверить для щелчки мыши за окном вот так:
private void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
if (posX < 0 || posX > this.Width || posY < 0 || posY > this.Height)
this.Close();
}
private void Window_MouseMove(object sender, MouseEventArgs e)
{
Point p = e.GetPosition(this);
posX = p.X; // private double posX is a class member
posY = p.Y; // private double posY is a class member
}
private void Window_Activated(object sender, EventArgs e)
{
System.Windows.Input.Mouse.Capture(this, System.Windows.Input.CaptureMode.SubTree);
}
Это сделало работу для меня в сложном контексте: MFC, WindowsForms мамонт приложения - без вмешательства, никаких других сложных вещей. Надеюсь, что это помогает другим, сталкивающимся с этим странным поведением.
Ну, один из способов - связать обработчик событий с основным приложением и ответить на него, когда у вас есть, что окно открыто:
EventManager.RegisterClassHandler(typeof(Window), Mouse.MouseDownEvent, new MouseButtonEventHandler(OnMousepDown), true);
или
EventManager.RegisterClassHandler(typeof(yourAppClassName), Mouse.PreviewMouseDownEvent, new MouseButtonEventHandler(OnMousepDown), true);
//this is just a sample..
private void OnMousepDown(object sender, MouseButtonEventArgs e)
{
if (thatWindowThatYourTalkingAbout.IsOpen)
..do something
}
Большое спасибо за подсказку. К сожалению, я не могу использовать этот подход, так как приложение является более старым MFC-интерфейсом, который прошел через некоторые этапы Windows Forms. Я попробовал взломы и современные подходы и я наконец, может найти решение. – teodron
ничего себе, звучит как зверь! удачи, +1 к вашему сообщению ниже! –
- 1. wpf progressbar.RenderTransform за пределами окна в дизайнере
- 2. Перехват модального диалогового окна из другого приложения
- 3. Ловушка мыши за пределами модального диалога
- 4. Мышь Перемещение не запускается за пределами главного окна WPF
- 5. Как возможно, что контекстное меню WPF отображается за пределами окна?
- 6. javascript: события за пределами окна
- 7. Показать всплывающую подсказку за пределами текущего окна
- 8. Win32: Как рисовать за пределами моего окна?
- 9. Как вызвать метод главного окна WPF из модального окна?
- 10. DatePicker и другие всплывающие окна скрыты за модального всплывающего окна
- 11. Перехват вывода другого окна
- 12. Перехват сообщения pastefromclipboard за пределами TMemo, управления TEdit
- 13. Скриншот активного окна за пределами границ
- 14. Координаты мыши за пределами моего окна
- 15. QQuickwidget захватить изображение за пределами области окна
- 16. Заголовок продолжает расширяться за пределами окна браузера
- 17. Создайте HTML-холст за пределами текущего окна
- 18. событие загрузки окна за пределами HTML-заголовка
- 19. Параметры выбора отображаются за пределами окна
- 20. Прокручиваемый контент div-шоу за пределами окна?
- 21. Отображение информационного окна за пределами карты google
- 22. Swing GridBagLayout anchor находится за пределами окна
- 23. Всплывающий элемент за пределами главного окна браузера
- 24. Отключить клик за пределами окна сообщения JQuery
- 25. autocomplete to ui.item.url (за пределами окна iframe)
- 26. Мышь пресс и релиз за пределами окна
- 27. Закладка заголовка диалогового окна JQuery за пределами
- 28. QMenu отображается за пределами главного окна
- 29. Wicket Modal Window, любой способ закрыть его, если я нахожусь за пределами модального окна?
- 30. не отображать содержимое за пределами границы wpf
Предостережение к этому подходу заключается в том, что окно закрывается, если пользователь нажимает на строку заголовка окна. Это также делает невозможным перепозиционирование окна. – Brandon