gpt4 book ai didi

.net - WPF 中的窗口所有者没有始终位于顶部的行为

转载 作者:行者123 更新时间:2023-12-02 10:51:04 29 4
gpt4 key购买 nike

是否可以在不获取全部功能的情况下获取 Window.Owner 的部分功能?

有两个窗口,窗口 A 和窗口 B。我希望选择其中一个窗口会将它们置于其他应用程序之上,但其中一个窗口可以覆盖另一个应用程序。 (实际上不止两个,但它们的行为都应该相似。)

如果我将窗口 B 的 Owner 设置为 A,那么切换到任一窗口都会将两个窗口置于其他应用程序的前面(这是我想要的),但也会强制 B 始终位于 A 之上(我不想要)。

我实际上已经有了独立于 Owner/OwnedWindows 跟踪窗口层次结构的代码,因此我可以扩展它来解决激活问题。因此,如果这简化了问题,我正在寻找的替代答案是:

我实际上该怎么做“当用户激活此窗口时,将一组特定的窗口(应用程序中的所有其他窗口)带到我下面的 Z 顺序,同时保留相对于它们的现有 Z 顺序彼此”?

最佳答案

一种可能的解决方案是拥有一个隐藏窗口,它拥有应用程序中的所有窗口。

你可以这样声明:

<Window
Opacity="0"
ShowInTaskbar="False"
AllowsTransparency="true"
WindowStyle="None">

请务必从 App.xaml 中删除 StartupUri。在您的 App.xaml.cs 中,您将重写 OnStartup ,如下所示:

protected override void OnStartup(StartupEventArgs e)
{
HiddenMainWindow window = new HiddenMainWindow();
window.Show();

Window1 one = new Window1();
one.Owner = window;
one.Show();

Window2 two = new Window2();
two.Owner = window;
two.Show();
}

另一个困难是您希望如何处理关闭实际应用程序。如果其中一个窗口被视为 MainWindow,则只需将应用程序 ShutdownMode 更改为 ShutdownMode.OnMainWindowClose,然后将 MainWindow 属性设置为其中一个窗口即可。否则,您将需要确定所有窗口何时关闭并显式调用 Shutdown。

关于.net - WPF 中的窗口所有者没有始终位于顶部的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5455399/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com