2010-03-26 124 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