我在 WPF 应用程序中注意到了这种非常奇怪的行为。
我有一个MainWindow
,使用Show()
from显示App.OnStartup
。说MainWindow
可以打开一个(非模态)SubWindow
,也可以使用Show()
。SubWindow
的Owner
设置为MainWindow
。
SubWindow
关闭时,再次MainWindow
可见(好)。
某些操作可能会导致SubWindow
打开第三个窗口作为模式对话框,使用ShowDialog()
(Owner
设置为SubWindow
)。当该模态对话框在 a 的生命周期中至少打开和关闭一次时SubWindow
,就会发生奇怪的事情。
关闭后SubWindow
,MainWindow
不会出现。相反,无论后面 是什么随机窗口MainWindow
都会进入视野。谁能向我解释为什么会发生这种情况,以及如何解决?
模态对话框是使用 显示的普通对话框Window
,ShowDialog()
还是使用 显示的消息框没有区别MessageBox.Show()
。
这是一些重现此的最小代码。在 Visual Studio 中创建一个新的 WPF 应用程序,并将其粘贴到预先生成的 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();
}
};
}