2010-05-07 58 views
1

我們擁有基於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的根選項卡控件,但是我無法讓它工作。有任何想法嗎?

回答

0

所以我們通過將NavigationWindow鏈接到一個Frame並將內容放入框架中來解決這個問題。爲了使它看起來很好,我們需要做一些造型;但是,這是避免在NavigationWindow內容模板中使用區域的唯一方法。我們現在從應用程序中常見的框架中刪除所有代碼,並將由Shell使用(因爲NavigationWindow不能成爲Shell)。

0

模板中的區域是一個問題 - 因爲模板在初始內容之後呈現,但它們不是「控件」或甚至是實例本身,區域管理器無法處理它。我會假設以這種方式添加一個區域不會被支持。

現在,staright向上選項卡控件w/no模板我能夠工作得很好,但回想起需要編寫一個知道如何處理目標區域類型的內容適配器,並在啓動之前在引導程序中註冊該適配器模塊加載。

+0

在渲染完成後,是否可以將區域附加到選項卡? – 2010-05-07 19:34:55

+0

你可以 - 但你必須得到正在使用的區域管理器的句柄,所以如果你只有1個(例如全局的),它會使它更容易。您可以創建該選項卡,然後在事實之後通過代碼將其指定爲區域的目標,以便加載模塊然後遍歷它們,併爲每個模塊創建選項卡,分配名稱,然後將該選項卡註冊爲一個地區的中央地區經理。我認爲你可能仍然需要一個內容適配器,這樣prizm就知道如何把傳入的內容放在一起。 – 2010-05-07 19:42:33

+0

我應該提到,自從我上一次使用它以來,prizm已經經歷了一次徹底改革 - 我不確定內容適配器範例是否仍然存在,但在那時您是如何管理視圖的。那時可以動態地註冊地區 - 我們做了廣泛的評估。 – 2010-05-07 19:44:20