12

すべてを取得せずにの機能の一部を取得することは可能Window.Ownerですか?

ウィンドウAとウィンドウBの2つのウィンドウがあります。どちらかを選択すると、他のアプリケーションの上に表示されるようにしたいと思いますが、どちらか一方をもう一方に重ねることができます。(実際には2つ以上ありますが、すべて同じように動作するはずです。)

ウィンドウBOwnerをAに設定した場合、どちらかのウィンドウに切り替えると、両方が他のアプリケーション(必要なもの)の前に表示されますが、Bは常にA(不要なもの)の上に配置されます。

Owner私は実際に/とは無関係にウィンドウ階層を追跡するコードをすでに持っているOwnedWindowsので、おそらくそれを拡張してアクティベーションの問題を解決することができます。したがって、それで問題が単純化された場合、私が探している別の答えは次のとおりです。

実際にどのようにすればよいですか?「このウィンドウがユーザーによってアクティブ化されたら、特定のウィンドウのセット(アプリ内の他のすべて)を私のすぐ下のZオーダーに移動し、既存のZオーダーを相互に保持します」 ?

4

1 に答える 1

5

考えられる解決策の 1 つは、アプリ内のすべてのウィンドウを所有する非表示のウィンドウを作成することです。

次のように宣言します。

<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();
}

もう 1 つの問題は、実際のアプリケーションを閉じる方法です。これらのウィンドウの 1 つが MainWindow と見なされる場合は、アプリケーションの ShutdownMode を ShutdownMode.OnMainWindowClose に変更し、MainWindow プロパティをこれらのウィンドウのいずれかに設定します。それ以外の場合は、すべてのウィンドウがいつ閉じられるかを判断し、Shutdown を明示的に呼び出す必要があります。

于 2011-04-08T05:28:58.587 に答える