当所有者窗口位于子窗口下方时,单击它时,WPF中的所有者窗口是否可以位于子窗口的顶部?
这是我如何调用子窗口的示例:
Window2 window = new Window2();
window.Owner = this;
window.Show();
父/所有者窗口将始终位于子窗口下。
答案 0 :(得分:7)
要获得所需的行为,您不希望在任一窗口上设置所有者。
当你关闭任何一个窗户以关闭你想象中的“孩子”窗口时,你当然必须自己处理逻辑。
您可能需要实施一些与最小化,最大化等相关的其他逻辑。
答案 1 :(得分:1)
此页面上的许多答案都涉及清零-out Window.Owner
属性的部分或全部(非MainWindow
) System.Windows.Application
中的窗口。虽然这是一个简单易行的修复方法,确实可以单独修复 Window
重叠问题,但不幸的是,它也抑制了许多有用的应用程序范围的功能,WPF 在其他方面似乎很渴望这些功能在以下领域提供:
Application
激活/停用(通过鼠标点击、桌面Alt-Tab 切换等...),Application.ShutdownMode
属性,一般来说,Application
。通过指定一个特殊的不可见窗口实例作为您的{{ 1}}。
修改您的应用程序,使其创建的第一个 Window
(即分配给 Application.MainWindow
的 Window
)是一个特殊的虚拟 Window
,然后通过将其 Application.MainWindow
设置为 Window
或调用 Visibility
使其不可见。这不会隐藏其拥有的窗口。然后,确保您想要的“主”窗口包含您的真实内容,以及此不可见窗口拥有的所有其他窗口。
一旦隐藏,虚拟 Visibility.Hidden
将不会显示在 Windows 10 任务栏中。您可以根据需要在您认为适合模拟明显特殊指定的任何可见窗口上设置 Window.Hide()
属性。
此方法允许 Window
中的任何可见窗口位于其他窗口之上,同时仍保留 WPF 功能和行为以激活系统范围的应用程序。例如,当 Window.ShowInTaskbar
被激活时(通过点击任意一个窗口,或通过 Alt-tab),应用程序的所有窗口都被置于任何其他桌面应用程序窗口之上,同时仍保留最新的“应用内”Z 顺序。还保留了 WPF 关闭功能,包括根据正在关闭的不可见 Application
(或所有其他)正确观察 Application
逻辑。
答案 2 :(得分:0)
我遇到了类似的情况。我通过在显示窗口后删除所有者来解决此问题。
Window2 window = new Window2();
window.Owner = this;
window.Show();
window.Owner = null;