我用两个窗口创建了新的WPF应用程序。
在MainWindow.xaml中添加了一个按钮,并在按钮的单击事件中编写了以下代码:
Window1 w = new Window1();
w.Show();
我点击了那个按钮2-3次,它打开了Window1的多个实例。
直到这里一切都很好。
现在,我关闭了MainWindow并且它没有关闭Windows1的实例。
我在想,因为MainWindow是拥有Process的那个,如果它关闭,其余的子窗口将自动关闭。
我在WinForms应用程序中执行了相同的项目,结果完全不同。在关闭MainWindow时,它确实关闭了其余的窗口。
我不明白这个概念吗?有人能告诉我谁拥有WPF中的进程或主线程?
答案 0 :(得分:5)
除非您设置window.Owner = mainWindow;
此外还有Application.MainWindow
属性,用于设置哪个窗口实际被视为“主窗口”。如果设置为Application.ShutdownMode
,则会影响OnMainWindowClose
。
摘自Window.Owner
参考:
当父窗口通过调用ShowDialog打开子窗口时,隐式 在父窗口和子窗口之间建立关系。这种关系强制执行某些行为,包括最小化,最大化和恢复。
当a创建子窗口时 父窗口通过调用Show, 但是,子窗口没有 与父母有关系 窗口。这意味着:
子窗口没有父窗口的引用。
子窗口的行为不依赖于行为 父窗口;两个窗口都可以 覆盖另一个,或最小化, 最大化,并独立恢复 另一个。
允许您创建关系 在子窗口和父窗口之间 窗口,Window支持的概念 所有权。所有权已建立 当窗口的Owner属性时 (拥有的窗口)设置为 引用另一个窗口(所有者 窗口)。
应用程序根类:System.Windows.Application