16

ウィンドウではなく、ナビゲーション スタイル ページを使用して WPF アプリを構築しています。ページ内にウィンドウを表示したいのですが、このウィンドウはページに対してモーダルである必要がありますが、ユーザーが他のページに移動し、同じ状態のモーダル ウィンドウで同じページに戻ることができます。

私は WPF ポップアップ コントロールを試してみましたが、問題は、ページから移動するたびにコントロールが非表示になることです。もう一度表示するコードを書くことはできると思いますが、正しい方法で縫い合わせることはできません。

WPFでこれを行う最良の方法は何ですか?

4

4 に答える 4

18

このStackOverflow の回答は、途中で役立つ場合があります。他のユーザーから要望があったサンプル コードをいくつか作成しました。これをブログ投稿hereに追加しました。

お役に立てれば!

于 2009-02-25T00:44:17.163 に答える
5

ネストされたメッセージ ポンプを使用してモーダル コントロールを作成しない理由

http://www.deanchalk.com/wpf-modal-controls-via-dispatcherframe-nested-message-pumps/

于 2010-11-12T10:46:19.630 に答える
3

装飾層を使用してそれ自体を他のすべての上に配置するポップアップ クラスを作成できます。

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

これが正しい方向に向けられることを願っています。

于 2009-02-25T00:34:27.170 に答える
1

Windows はあなたがそれをするのを好みません - それは WPF のことではありません。上にあるパネルを使用し、visible または zorder プロパティを使用します。

ウィキペディアには良い議論があります。

于 2009-01-09T18:57:37.217 に答える