Я заметил это очень странное поведение в приложении WPF.
У меня есть MainWindow
, который показан с помощью Show()
из App.OnStartup
. Сказанный MainWindow
может открыть (немодальный) SubWindow
, также используя Show()
. SubWindow
Owner
установлен на MainWindow
.
Когда SubWindow
закрыто, MainWindow
снова отображается (хорошо).
Некоторые действия могут привести к тому, что SubWindow
откроет третье окно в виде модального диалога, используя ShowDialog()
(Owner
установлено значение SubWindow
). Когда этот модальный диалог открывается и закрывается хотя бы один раз за время жизни SubWindow
, тогда возникает странная вещь.
После закрытия SubWindow
, MainWindow
не появляется. Вместо этого появляется какое-либо случайное окно за MainWindow
. Может ли кто-нибудь объяснить мне, почему это происходит, и как его исправить?
Не имеет значения, отображается ли модальное диалоговое окно с нормальным Window
, используя ShowDialog()
, или окно сообщения, показанное с помощью MessageBox.Show()
.
Вот некоторые минимальные коды, чтобы воспроизвести это. Создайте новое приложение WPF в visual studio и вставьте его в предварительно сгенерированный файл MainWindow.xaml.cs
Затем нажмите клавишу на клавиатуре, чтобы открыть только одно окно, закрыть его, как и следовало ожидать. Нажмите две клавиши, закройте оба, затем самое первое окно находится за Visual Studio (предположительно).
public MainWindow()
{
InitializeComponent();
this.PreviewKeyDown += (sender, e) =>
{
if (this.Owner is MainWindow)
{
// we're the SubWindow
MessageBox.Show("I am a modal dialog");
// code below produces the exact same behavior as the message box
//var dialog = new MainWindow();
//dialog.Owner = this;
//dialog.ShowDialog();
}
else
{
// we're the initial MainWindow created by App.
var subWindow = new MainWindow();
subWindow.Owner = this;
subWindow.Show();
}
};
}