Подтвердить что ты не робот

Владелец окна в WPF без пошагового поведения

Можно ли получить некоторые функциональные возможности Window.Owner, не получив все это?

Есть два окна, окно A и окно B. Я хочу сделать так, чтобы выбор одного из них привел их поверх других приложений, но один может наложить другой. (На самом деле там больше двух, но все они должны вести себя одинаково.)

Если я установил окно B Owner в A, то переход в любое окно приведет к тому, что перед другими приложениями (что я хочу), но также заставит B всегда сидеть поверх A (что я не знаю) t хотите).

У меня на самом деле уже есть код, который отслеживает иерархию окон независимо от Owner/OwnedWindows, поэтому я могу, вероятно, расширить это, чтобы разобраться в проблеме активации. Поэтому, если это упростит проблему, альтернативный ответ, который я ищу, это:

Как я действительно делаю ", когда это окно активируется пользователем, принесите определенный набор окон (все остальные в приложении) в Z-порядок чуть ниже меня, сохраняя их существующие Z-порядки относительно друг друга"?

4b9b3361

Ответ 1

Одним из возможных решений могло бы быть скрытое окно, в котором есть все окна в вашем приложении.

Вы объявили бы это что-то вроде:

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

Обязательно удалите StartupUri из App.xaml. И в вашем 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.