WPF. Вложенные модальные диалоговые окна

#wpf

#wpf

Вопрос:

У меня есть несколько окон (MainWindow, Window1, Window2) в приложении WPF, в каждом окне есть кнопка, которая показывает следующее окно (MainWindow -> Window1 -> Window2) в модальном режиме. Что-то вроде:

Обработчик кнопок MainWindow

  Visibility = Visibility.Hidden;
 Window1 w = new Window1();
 w.ShowDialog();
 Visibility = Visibility.Visible;
 

Обработчик кнопок Window1

  Visibility = Visibility.Hidden;
 Window2 w = new Window2();
 w.ShowDialog();
 Visibility = Visibility.Visible;
 

Проблема в том, что при закрытии Window2 (Alt F4) не только Window1 завершает вызов метода «w.ShowDialog ()», но и MainWindow! Когда Window2 закрывается — оба окна (Window1 MainWindow) становятся видимыми одновременно!

Почему MainWindow становится видимым и что я могу сделать, чтобы избежать этого?

Заранее благодарю вас!

Ответ №1:

Если вы скрываете окна, вы можете также использовать Show() метод и обрабатывать Closed событие вместо вызова ShowDialog() :

 Visibility = Visibility.Hidden;
Window1 w = new Window1();
w.Closed  = (ss, ee) => Visibility = Visibility.Visible;
w.Show();
 

Это должно решить вашу проблему.

Комментарии:

1. Наконец я закончил с вашим решением, хотя это очень странно — ShowDialog не работает в WPF так же, как в Windows Forms. Windows Forms позволяет мне создавать вложенные модальные диалоговые окна так, как я ожидал