2009-06-18 52 views
11

私は複合WPFアプリケーションを持っています。私のモジュールの1つでは、ウィザードを作成して、ステップを地域に表示して、ステップを簡単に切り替えることができます。もともと私は、このウィザードをタブ領域に表示させ、ネストされた領域は正常に機能しました。今度はモーダルダイアログボックスにしたいのですが、開いた後、内側の領域はリージョンマネージャーに登録されません。だから私はウィザードのステップを追加することはできません。WPF、Prism v2、モーダルダイアログの領域、コード内に領域を追加する

私は、リージョンマネージャがグローバルであり、cal:RegionManager.RegionName = "WizardSteps"を追加するだけで、明らかにそうではないという印象を受けました。

私が領域マネージャをビューに渡すと、私はそれを使うことができるかもしれません...誰かがコードの中のContentControlにリージョンを追加する方法を知っていますか?

答えて

17

リージョンは、RegionManager添付プロパティのビジュアルツリーを検索し、そのマネージャで自分自身を登録するという問題があります。メインウィンドウでは問題ありませんが、子ウィンドウではこれは起こりません。

ブートストラップでは、シェルを作成した後、次のコードが実行されます。あなたの子ウィンドウで作業する領域マネージャを取得するには

RegionManager.SetRegionManager(shell, this.Container.Resolve<IRegionManager>()); 
RegionManager.UpdateRegions(); 

あなたは、ウィンドウを作成した直後に同じことを行います。コントロールの地域名を設定するには

EDIT

あなたはXAML aswellでこれを行うことができますしかし、あなたもそう...

RegionManager.SetRegionName(control, "MyRegion"); 

のように、RegionManagerの添付プロパティを設定します。別のウィンドウでリージョンが機能しないのは、上記のように、RegionManagerをベースウィンドウに設定する必要があるためです。

+0

このコードは私には役に立たないようですが、私のregionmanagerはSetRegionManager()、またはUpdateRegions()という機能を持っていないようです。 コードの背後に新しい領域を作成する方法はありませんか? – Shaboboo

+2

これらはインスタンスメソッドではなく、RegionManagerクラスの静的呼び出しです。また、コードでリージョンを作成する方法を示すために私の答えを更新します。 –

+0

RegionManagerのstaticメソッドを指摘してくれてありがとう。それはまさに私が探していたものでした! –

0

ほとんど何かを見つけました。リージョンのアクティブなビューをcontentContolのcontentプロパティにバインドできたら、それはうまくいくはずですが、まだそれを管理していません。

IRegionManager MyRegionManager = container.Resolve<IRegionManager>(); 
SingleActiveRegion newRegion = new SingleActiveRegion(); 
MyRegionManager.Regions.Add("WizardSteps", newRegion); 

//Binding 
Binding myBinding = new Binding("ActiveViews"); 
myBinding.Source = newRegion; 
view.stepControl.SetBinding(ContentControl.ContentProperty, myBinding); 
7

実際は非常に簡単です。

xamlのポップアップで、シェルで行うのと同じようにリージョン名を追加します。 - あまりにも多くの異なるそれ以降のバージョンであってはならない

public Popup(IRegionManager regionManager) 
{ 
    InitializeComponent(); 
    RegionManager.SetRegionManager(this,regionManager); 
} 

これは、プリズムV.1で私の作品: は、次にポップアップコンストラクタで、次の呼び出しを追加します。

関連する問題