我注意到在一个WPF应用程序中出现了一个非常奇怪的行为。
我有一个MainWindow
,使用Show()
从App.OnStartup
中显示。说的MainWindow
可以打开一个(非模态的)SubWindow
,也使用Show()
。 SubWindow
的 Owner
设置为 MainWindow
。
当关闭SubWindow
时,MainWindow
会再次可见(很好)。
某些操作会导致SubWindow
作为模态对话框打开第三个窗口,使用ShowDialog()
(Owner
设置为SubWindow
)。 当在SubWindow
的寿命期内至少打开和关闭一次该模态对话框时,奇怪的事情发生了。
关闭SubWindow
后,MainWindow
不会出现。相反,任何随机的位于MainWindow
后面的窗口会出现。 有人能解释为什么会发生这种情况,并说明如何修复吗?
无论模态对话框是使用ShowDialog()
显示的普通Window
,还是使用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();
}
};
}