WPF:ページにモーダルなポップアップウィンドウを表示する最良の方法は?
質問
私は、ウィンドウではなくナビゲーションスタイルページを使用してWPFアプリを構築しています。 ページ内にウィンドウを表示します。このウィンドウはページに対してモーダルでなければなりませんが、ユーザーは他のページに移動し、同じ状態のモーダルウィンドウで同じページに戻ることができます。
WPFポップアップコントロールを試しましたが、問題は、ページから移動するたびにコントロールが非表示になることです。もう一度表示するコードを書くことができると思いますが、正しい方法で縫い合わせていません。
WPFでこれを行う最善の方法は何ですか?
解決
この StackOverflowの回答が役に立つかもしれません。 他のユーザーが要求したサンプルコードを作成しました。これをブログ投稿こちらに追加しました。
これがお役に立てば幸いです!
他のヒント
ネストされたメッセージポンプを使用してモーダルコントロールを作成するだけではない理由
http://www.deanchalk.com / wpf-modal-controls-via-dispatcherframe-nested-message-pumps /
装飾レイヤーを使用して他のすべての上に配置するポップアップクラスを作成できます。
IsOpen というプロパティを持つポップアップの基本クラスを作成し、変更されたときにコントロールの可視性を適切な値に設定します。
クリックされたポップアップの下にあるコントロールを停止するには、ポップアップにページのフルサイズを取得させることができます。ポップアップが表示される実際の中央を除き、ほとんど透明になります。ポップアップの完全に透過的なexecptにしたい場合は、ポップアップのHitTestCoreをオーバーライドする必要があります。
次のようなもの:
protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters)
{
// We want this control to behaive as a single rectangle and we don't much care
// whether or it has a solid background. So we override this method so we can have // mouse over info for the entire panel regardless of background.
// run the base hit test first, because if it finds something we don't want to overrule it.
HitTestResult result = base.HitTestCore(hitTestParameters);
// If we didn't get a hit generate a new hit test result, because HitTestCore is never called unless
// the mouse is over the controls bounding rectangle.
if (result == null)
result = new PointHitTestResult(this, hitTestParameters.HitPoint);
return result;
}
これがあなたを正しい方向に向けることを願っています。
Windowsはあなたがそうすることを好まない-それはWPFのことではない。上にあるパネルを使用し、visibleまたはzorderプロパティを使用します。
ウィキペディアには良い議論があります。