C# WPF .NET 3.5 でアプリケーションを開発しています。メイン ウィンドウ M があり、そこから Window.Show() メソッドを使用して設定されていない Owner プロパティを持つモードレス子ウィンドウ C1 を開きます。C1 ウィンドウから、別の子ウィンドウ C2 を作成します。C2 から別の子ウィンドウ C3 を作成します。C2 と C3 はどちらもモードレスで、Window.Show() メソッドで作成され、Owner プロパティが設定されていません。以下は、一連のウィンドウです。
M -> C1 -> C2 -> C3
次のようなウィンドウの動作が必要です。C1 をクリックし、C2 が開いている場合、C2 が最前面に表示されます。C2 が最前面に移動するか、C2 をクリックして C3 が開いている場合、C3 が最前面に移動します。M をクリックすると、M が一番上に来るはずです。したがって、C1、C2、および C3 はモーダル ウィンドウのように動作します。ただし、C1、C2、および C3 を実際にモーダルにしたくありません。つまり、Owner プロパティが設定された Window.ShowDialog() メソッドで作成したくありません。これは、ユーザーが必要に応じてメイン ウィンドウ M に移動できるようにするためです。どうすればこの動作を実現できますか?
よろしくお願いします。
ギークウル
アップデート:
提案に従って、親ウィンドウに GotFocus イベント ハンドラーを追加しましたが、GotFocus イベントは発生しません。そこで、Activated イベント ハンドラーを追加し、このハンドラーで子ウィンドウの Activate() を呼び出しました。これで問題はほぼ解決しましたが、特定の条件下では、このアプローチは完全には機能しません。たとえば、子が最小化され、親がクリックされると、子はアクティブになりますが、子は自動的に最大化されません。Activate() を使用する代わりに、他の方法を使用して子をトップにしようとしましたが、完璧な解決策はありませんでした。最終的に、子ウィンドウを表示した後に親ウィンドウを非表示にし、子ウィンドウを閉じたときに親ウィンドウを再度表示する方法を使用しました。