2010-03-26 6 views
2

J'ai un menu (Telerik RadMenu) dont les régions imbriquées sont définies dans l'environnement Shell. Dans mes modules, je vais enregistrer le menu des modules ou les éléments de la barre d'outils avec ces régions. Tout fonctionne correctement pour les régions racine, mais lorsque j'essaie d'ajouter quelque chose à une région enfant, telle que la région Fichier dans le Menu, j'obtiens l'erreur "Le message d'exception était: Le gestionnaire de région ne contient pas la région FileMenuRegion.Les régions imbriquées de MVVM Prism ne peuvent pas trouver de régions enfants

Cependant, comme je l'ai dit, si je change ce code

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

à cette

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

tout fonctionne bien. Ci-dessous le XAML de mon menu afin que vous puissiez voir les noms des régions et comment ils sont construits. Toute aide serait grandement appréciée car c'est déconcertant et me rend fou.

Menu

<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> 

Répondre

1

Le XAML ci-dessus va à l'encontre de la conception des régions PRISM.

Toutes les régions sont censées être attachées à des contrôles dérivés de ContentControl. Le processus de chargement des vues enregistrées de la région remplace le contenu du conteneur de la région par les vues correspondantes enregistrées pour ce nom de région. Cela supprime votre nom de région imbriqué afin que l'erreur que vous voyez est correcte. L'idée est qu'une vue enregistrée pour un nom de région spécifié peut elle-même contenir d'autres régions.

+0

Y a-t-il un moyen d'avoir des régions imbriquées ou non? S'il vous plaît jeter un oeil à [this] (http://compositewpf.codeplex.com/discussions/249769#post725985) commentaire pour comprendre mon problème exact - note, c'est le 3ème message dans ce fil. Merci! – Shimmy

+1

Les régions sont des blocs de construction de mise en page uniquement. Le processus d'imbrication implique que vous voulez réellement des zones remplaçables dans des zones remplaçables. La solution consisterait à enregistrer des vues dans la région de niveau supérieur comme d'habitude, chacune contenant d'autres définitions de région. Les contrôles utilisateur peuvent avoir des régions, souvent simplement pour insérer des informations d'état fournies par des sources inconnues. –

+0

J'ai trouvé ma réponse. publié [ici] (http://compositewpf.codeplex.com/discussions/249769#post726075). – Shimmy

Questions connexes