12

是否有可能在Window.Owner不获得全部功能的情况下获得一些功能?

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

如果我将窗口 B 设置Owner为 A,那么切换到任一窗口都会将两者都放在其他应用程序的前面(我想要的),但也会迫使 B 总是坐在 A 的顶部(我不想要)。

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

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

4

1 回答 1

5

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

你会声明它是这样的:

<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。

于 2011-04-08T05:28:58.587 回答