【发布时间】:2013-02-19 18:46:00
【问题描述】:
如果我将 Owner 设置为 Window 并以非对话框模式显示它,我会得到两件事: 1. 子窗口总是在父窗口的顶部(同时仍然可以访问父窗口) 2. 如果我关闭父窗口,子窗口也会关闭
在对话窗口的情况下,这两点都没有意义: 1. 子窗口独立于 Owner 属性位于父窗口之上 2.你没有机会关闭父窗口
所以我是对的,将 Owner 属性设置为 Dialog 窗口是没有意义的,或者可能有一些论据?
【问题讨论】:
如果我将 Owner 设置为 Window 并以非对话框模式显示它,我会得到两件事: 1. 子窗口总是在父窗口的顶部(同时仍然可以访问父窗口) 2. 如果我关闭父窗口,子窗口也会关闭
在对话窗口的情况下,这两点都没有意义: 1. 子窗口独立于 Owner 属性位于父窗口之上 2.你没有机会关闭父窗口
所以我是对的,将 Owner 属性设置为 Dialog 窗口是没有意义的,或者可能有一些论据?
【问题讨论】:
正如the documentation 指出的原因:
通过调用 ShowDialog 打开子窗口时,还应设置子窗口的 Owner 属性。如果您不这样做,那么您的用户将无法通过按任务栏按钮来恢复子窗口和父窗口。相反,按下任务栏按钮将产生一个窗口列表,包括子窗口和父窗口,供他们选择;仅恢复选定的窗口。
您还应该在通过调用 ShowDialog 打开的窗口上设置 Owner 属性,以确保 UI 自动化的正确行为。
【讨论】:
除了 H.B.说,
在显示之前设置窗口的所有者很重要,因为 否则在焦点窗口或模态窗口所在的位置可能会出现奇怪的错误 隐藏在其他窗户后面。为了防止此类错误,您设置 当前窗口的所有者属性。
Mark Seemann,.NET 中的依赖注入
【讨论】: