Windowsではなくナビゲーションスタイルのページを使用してWPFアプリを構築しています。ページ内にウィンドウを表示したいのですが、このウィンドウはページに対してモーダルである必要がありますが、ユーザーは他のページに移動して、同じ状態のモーダルウィンドウで同じページに戻ることができます。
WPFポップアップコントロールを試してみましたが、問題は、ページから移動するたびにコントロールが非表示になることです。もう一度表示するコードを書くことはできると思いますが、正しい方法で継ぎ目がありません。
WPFでこれを行うための最良の方法は何ですか?
これ StackOverflow回答 あなたの途中であなたを助けるかもしれません。他のユーザーが要求したサンプルコードをいくつか作成しました。これをブログ投稿に追加しました ここ 。
お役に立てれば!
ネストされたメッセージポンプを使用してモーダルコントロールを作成しないのはなぜですか
http://www.deanchalk.com/wpf-modal-controls-via-dispatcherframe-nested-message-pumps/
Adornerレイヤーを使用して他のすべての上に自分自身を置くポップアップクラスを作成できます。
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プロパティを使用します。
ウィキペディア 良い議論があります。