2009-06-18 59 views
11

我有一個複合WPF應用程序。在我的一個模塊中,我想製作一個嚮導,並將步驟顯示在一個區域中,以便我可以更輕鬆地切換步驟。最初我有這個嚮導出現在選項卡區域和嵌套區域工作正常。現在我想把它變成一個模態對話框,但是當我打開它之後,內部區域就不會和區域經理一起註冊了。所以我不能添加我的嚮導步驟。WPF,Prism v2,模態對話框中的區域,在代碼後面添加區域

我的印象是區域管理器是全局的,只是添加cal:RegionManager.RegionName =「WizardSteps」會做到這一點,但顯然不是。

如果我通過區域管理器的視圖,我可能會使用它...有誰知道如何添加一個區域的代碼後面的ContentControl?

回答

17

問題是區域搜索RegionManager附屬屬性的可視化樹,然後向該管理器註冊自己。在沒有問題的主窗口中,但在子窗口中,這不會發生。

在引導程序中,在創建shell之後,將執行以下代碼。

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

爲了讓區域經理與你的子窗口一起工作,在創建窗口後立即做同樣的事情。

編輯

要設置一個控制的區域名稱,還設置RegionManager的附加屬性,像這樣......

RegionManager.SetRegionName(control, "MyRegion"); 

但是你可以在XAML藏漢做到這一點。您的區域在單獨窗口中不起作用的原因是RegionManager需要在基本窗口上設置,就像我上面所示。

+0

此代碼似乎沒有幫助我任何,我的regionmanager似乎並沒有稱爲SetRegionManager()或UpdateRegions()的功能。 有沒有辦法在後面的代碼中創建一個新的區域? – Shaboboo 2009-06-22 13:37:09

0

我發現了幾乎可以工作的東西。我確定如果我可以將該地區的活動視圖綁定到contentContol的內容屬性,那麼它將工作,但我還沒有管理。

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中,像在shell中一樣添加regionname。 然後在彈出窗口構造函數中添加以下調用:

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

這對我的作品在棱鏡1節 - 不應該在以後的版本太多不同。

相關問題