2010-03-26 123 views
2

我有一個菜單(Telerik RadMenu),它具有在Shell中定義的嵌套區域。在我的模塊中,我將使用這些區域註冊模塊菜單或工具欄項目。一切工作正常的根區域,但當我嘗試並添加一些子區域,如菜單上的文件區域,我收到錯誤「異常消息是:區域管理器不包含FileMenuRegion區域。MVVM Prism嵌套區域找不到子區域

但是就像我說的,如果我這個代碼

regionManager.Regions[RegionNames.FileMenuRegion].Add(menuItem); 

改變這種

regionManager.Regions[RegionNames.MainMenuRegion].Add(menuItem); 

一切工作正常。以下是我的菜單中的XAML,以便您可以查看區域名稱以及它們的構建方式。任何幫助將不勝感激,因爲這是令人困惑,讓我瘋狂。

菜單

<telerikNavigation:RadMenu x:Name="menuMain" DockPanel.Dock="Top" prismrgn:RegionManager.RegionName="{x:Static i:RegionNames.MainMenuRegion}" telerik:StyleManager.Theme="{Binding Source={StaticResource settings}, Path=Default.CurrentTheme}"> 
      <telerikNavigation:RadMenuItem Header="{x:Static p:Resources.File}" prismrgn:RegionManager.RegionName="{x:Static i:RegionNames.FileMenuRegion}"> 
       <telerikNavigation:RadMenuItem Header="{x:Static p:Resources.Exit}" Command="{Binding ExitCommand}"> 
        <telerikNavigation:RadMenuItem.Icon> 
         <Image Source="../Resources/Close.png" Stretch="None" /> 
        </telerikNavigation:RadMenuItem.Icon> 
       </telerikNavigation:RadMenuItem> 
      </telerikNavigation:RadMenuItem> 
     </telerikNavigation:RadMenu> 

回答

1

以上XAML違背PRISM區域的設計。

所有地區都應該附加到來自ContentControl的控件。加載區域註冊視圖的過程用爲該區域名稱註冊的任何匹配視圖替換區域容器的內容。這將刪除您的嵌套區域名稱,以便您看到的錯誤是正確的。

想法是,爲指定的區域名稱註冊的視圖本身可以包含其他區域。

+0

所以有嵌套區域的方式嗎?請查看[this](http://compositewpf.codeplex.com/discussions/249769#post725985)評論以瞭解我的確切問題 - 請注意,這是該主題中的第3篇文章。謝謝! – Shimmy 2012-01-16 21:09:24

+1

區域只是佈局構建塊。嵌套過程意味着您實際上需要更換可更換區域內的可更換區域。解決方案將像往常一樣在頂級區域註冊視圖,每個視圖都包含其他區域定義。用戶控件可以有區域,通常只需插入未知來源提供的狀態信息。 – 2012-01-17 11:21:38

+0

我找到了我的答案。張貼[這裏](http://compositewpf.codeplex.com/discussions/249769#post726075)。 – Shimmy 2012-01-17 13:49:56