子窗口顶部的WPF所有者窗口

时间:2009-06-29 08:53:48

标签: c# .net wpf user-interface

当所有者窗口位于子窗口下方时,单击它时,WPF中的所有者窗口是否可以位于子窗口的顶部?

这是我如何调用子窗口的示例:

Window2 window = new Window2();
window.Owner = this;
window.Show();

父/所有者窗口将始终位于子窗口下。

3 个答案:

答案 0 :(得分:7)

要获得所需的行为,您不希望在任一窗口上设置所有者。

当你关闭任何一个窗户以关闭你想象中的“孩子”窗口时,你当然必须自己处理逻辑。

您可能需要实施一些与最小化,最大化等相关的其他逻辑。

答案 1 :(得分:1)

此页面上的许多答案都涉及清零-out Window.Owner 属性的部分或全部(MainWindowSystem.Windows.Application 中的窗口。虽然这是一个简单易行的修复方法,确实可以单独修复 Window 重叠问题,但不幸的是,它也抑制了许多有用的应用程序范围的功能,WPF 在其他方面似乎很渴望这些功能在以下领域提供:

  • Application 激活/停用(通过鼠标点击、桌面Alt-Tab 切换等...),
  • 正确遵守 Application.​ShutdownMode 属性,一般来说,
  • 在关闭时有序清理、资源处理和退出您的 Application

通过指定一个特殊的不可见窗口实例作为您的{{ 1}}。

修改您的应用程序,使其创建的第一个 Window(即分配给 Application.MainWindowWindow)是一个特殊的虚拟 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;