【发布时间】:2012-10-23 22:56:30
【问题描述】:
我在 WPF 应用程序中注意到了这种非常奇怪的行为。
我有一个MainWindow,使用来自App.OnStartup 的Show() 显示。说MainWindow可以打开一个(非模态)SubWindow,也可以使用Show()。 SubWindow 的Owner 设置为MainWindow。
当SubWindow 关闭时,MainWindow 再次可见(很好)。
使用ShowDialog()(Owner 设置为SubWindow),某些操作可能会导致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();
}
};
}
【问题讨论】:
-
很好的问题。并且说得好。谢谢。
标签: c# wpf dialog window modal-dialog