我們擁有基於NavigationWindow的「傳統」WPF應用程序。該NavigationWindow有一個相當大的ControlTemplate,其容納ContentPresenter像這樣:在現有導航窗口中添加PRISM區域管理器
<ControlTemplate>
....snip...
<ContentPresenter x:Name="PART_NavWinCP" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
.....snip....
</ControlTemplate>
我們想要做的是使用該ContentPresenter作爲第一個選項卡,然後在運行時動態添加其他標籤。像這樣:
<ControlTemplate>
....snip...
<TabControl Background="Transparent" cal:RegionManager.RegionName="MainRegion" Grid.ColumnSpan="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<TabItem Header="Nav Window Content">
<ContentPresenter x:Name="PART_NavWinCP" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
</TabItem>
</TabControl>
.....snip....
</ControlTemplate>
然後我們的模塊獲取RegionName並動態地插入它們的內容。問題似乎是PRISM地區經理不喜歡我們的代碼位於ContentTemplate中,並且無法解析該地區。我試圖更新RegionManager,動態地添加區域,只有一個沒有ContentPresenter的根選項卡控件,但是我無法讓它工作。有任何想法嗎?
在渲染完成後,是否可以將區域附加到選項卡? – 2010-05-07 19:34:55
你可以 - 但你必須得到正在使用的區域管理器的句柄,所以如果你只有1個(例如全局的),它會使它更容易。您可以創建該選項卡,然後在事實之後通過代碼將其指定爲區域的目標,以便加載模塊然後遍歷它們,併爲每個模塊創建選項卡,分配名稱,然後將該選項卡註冊爲一個地區的中央地區經理。我認爲你可能仍然需要一個內容適配器,這樣prizm就知道如何把傳入的內容放在一起。 – 2010-05-07 19:42:33
我應該提到,自從我上一次使用它以來,prizm已經經歷了一次徹底改革 - 我不確定內容適配器範例是否仍然存在,但在那時您是如何管理視圖的。那時可以動態地註冊地區 - 我們做了廣泛的評估。 – 2010-05-07 19:44:20