У меня есть несколько окон (MainWindow, Window1, Window2) в приложении WPF. В каждом окне есть кнопка, которая показывает следующее окно (MainWindow -> Window1 -> Window2) в модальном режиме. Что-то вроде:
Обработчик кнопки главного окна
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) вызов метода "w.ShowDialog()" завершает не только Window1, но и MainWindow! При закрытии Window2 оба окна (Window1 + MainWindow) становятся видимыми одновременно!
Почему MainWindow становится видимым и что мне делать, чтобы этого избежать?
Заранее спасибо!
Если вы скрываете окна, вы можете использовать метод Show()
и обрабатывать событие Closed
вместо вызова ShowDialog()
:
Visibility = Visibility.Hidden;
Window1 w = new Window1();
w.Closed += (ss, ee) => Visibility = Visibility.Visible;
w.Show();
Это должно решить вашу проблему.
В конце концов я остановился на вашем решении, хотя оно очень странное - ShowDialog не работает в WPF так же, как в Windows Forms. Windows Forms позволяет мне иметь вложенные модальные диалоги так, как я ожидал.