11

プリズムフレームワークを使用してビューをオーバーレイする際に助けが必要です.それよりも少し複雑なので説明させてください.私もこれを考えすぎている可能性があります:D

私はシェル(wpfウィンドウ)を持っていて、モジュールに2つのビュー(AとB - 両方のユーザーコントロール)があります。シェルが読み込まれると、ビューAが読み込まれます。ビューAには、ユーザー入力のためにビューBを「ポップアップ」するボタンがあります。当然のことながら、ある種のモーダルウィンドウ/コントロール、おそらくポップアップでさえ考えます。ただし、ポップアップで直面する問題は、シェルを移動してもポップアップが固定されたままになり、ビュー A でイベントがブロックされないことです。ビュー A を無効にしてイベントの発生を停止しようとしましたが、to を使用しようとしましたビュー B をシェルで移動します。キャンバスだけが機能しますが、それをブロックする方法が必要です. とにかく、プリズムを使用して別のビューの上にビューを重ねることができますか? または、プリズムとwpfを使用してモーダルポップアップを作成する方法はありますか? アドバイスや指針をいただければ幸いです。

4

2 に答える 2

15

追加のウィンドウなしで埋め込みダイアログを使用する場合は、PrismのRegionManagerを使用してアウトライン化された動作を実現できます。秘訣は、ポップアップ領域をビジュアルツリーのメイン領域と平行に配置することです。

<Grid>
   <ContentControl cal:RegionManager.RegionName="MainRegion" IsEnabled={Binding IsNoPopUpActive} />
   <ContentControl cal:RegionManager.RegionName="PopUpRegion"/>
</Grid>

次に、RegionManagerを使用して、ビュー「A」を「MainRegion」に配置します。IPopUpDialogControllerと同様のコントローラークラスを作成します。ビュー「B」(またはアプリケーション内の他のPopUpView)をオンデマンドで「PopUpRegion」に配置する責任があります。さらに、基になる「MainRegion」を有効または無効にするように通知するフラグを制御する必要があります。このように、ポップアップが閉じられるまで、ユーザーはビュー「A」のコントロールで遊ぶことができません。

これは、フレームをDispatcherにプッシュする前に、ComponentDispatcher.PushModal()を使用してモーダル方式で実行することもできます。ただし、モーダルダイアログは避けることをお勧めします。


更新:コメントで要求されたように、IsNoPopUpActiveはバッキングビューモデルに実装できます。そこで、ポップアップ領域のRegionManagerのViewコレクションにリンクできます。

public bool IsNoPopUpActive 
{ 
    get { return _regionManager.Regions["PopUpRegion"].Views.Count() == 0; }
}

ビューコレクションを変更(ポップアップを追加/削除)するとすぐに、PropertyChangedイベントをトリガーすることを忘れないでください。

参考までに:最近は、バックグラウンドでコントロールを無効にすることを避け、代わりに透明なパネルを挿入しています。これにより、バックグラウンドコントロールをクリックする必要がなくなります。ただし、これはキーボード入力(コントロールへのタブ入力)を処理しません。キーボード入力を修正するには、キーボードフォーカスがポップアップにトラップされていることを確認する必要があります( WPFフォーカスの概念に関するMSDN)。

次のフォーカス属性をポップアップ領域に追加すると、うまくいくはずです。

KeyboardNavigation.DirectionalNavigation="None"
KeyboardNavigation.ControlTabNavigation="None"
KeyboardNavigation.TabNavigation="Cycle"
KeyboardNavigation.TabIndex="-1"
于 2010-03-19T15:29:34.040 に答える
2

Prism で WPF + MVVM を使用している場合は、このメッセージ ビュー オーバーレイ コントローラーを参照してください。このアプローチの優れた点は、モック オーバーレイ コントローラーを使用してビュー モデルに単体テストを記述し、ユーザーがオーバーレイで選択する結果をモック コントローラーに返させることができることです。

ここで見つけることができます:http://presentationlayer.wordpress.com/2011/05/24/wpf-overlay-message-view-controller/

お役に立てれば

于 2011-05-26T17:08:36.660 に答える