2009-08-02 6 views
0

J'ai un petit problème avec Regions dans PRISM. Tous les tests de bases fonctionnent très bien, mais maintenant je veux remplacer le code XAML suivant avec C# pur:PRISM RegionManager - Création non-XAML d'ItemsControl RegionManager

<UserControl x:Class="CAL.Modules.Simple.Region_Testing.RegionManagerTypes.XAML.ItemsControlRegionAdapterTest" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:cal="clr-namespace:Microsoft.Practices.Composite.Presentation.Regions;assembly=Microsoft.Practices.Composite.Presentation" 
    Height="Auto" Width="Auto"> 
     <ItemsControl cal:RegionManager.RegionName="ItemsControlRegionAdapterTestRegion"/> 
</UserControl> 

Le code dans ma classe de test est assez simple, j'accéder au RegionManager et ajouter quelques vues de test. Toutefois, comme vous le voyez dans le code XAML ci-dessus, rien ne se passe réellement dans UserControl, sauf si vous associez le gestionnaire RegionManager au contrôle. Je suis sûr que cela doit être possible dans le code, l'extension des lignes suivantes, je l'ai déjà:

 // MISSING 
     // Creating the UserControl in CODE instead of XAML 


     // Create the UserControl and add it to the main window 
     regionManager.AddToRegion(RegionNames.MainRegion, new ItemsControlRegionAdapterTest()); 

     // Add some views to the region inside the user control 
     var currentTestRegionName = TestingRegionNames.ItemsControlRegionAdapterTestRegion; 
     regionManager.Regions[currentTestRegionName].Add(new BlueView()); 
     regionManager.Regions[currentTestRegionName].Add(new RedView()); 

Merci pour avoir des conseils ...

Répondre

0

Essayez l'approche XamlReader:

private const string xaml = @" 
<UserControl x:Class=""CAL.Modules.Simple.Region_Testing.RegionManagerTypes.XAML.ItemsControlRegionAdapterTest"" 
    xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" 
    xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" 
    xmlns:cal=""clr-namespace:Microsoft.Practices.Composite.Presentation.Regions;assembly=Microsoft.Practices.Composite.Presentation"" 
    Height=""Auto"" Width=""Auto""> 
     <ItemsControl cal:RegionManager.RegionName=""ItemsControlRegionAdapterTestRegion""/> 
</UserControl>"; 

//in some method 
public void RunMethod() 
{ 
    //create object and cast it 
    ItemsControlRegionAdapterTest obj = (ItemsControlRegionAdapterTest) XamlReader.Parse(xaml); 
} 
+0

Oui, il travaille, et plus agréable que d'un fichier XAML (nettoyant). Mais regarde encore un peu moche. Ajout d'un exemple de "travail" dans une réponse (si quelqu'un en a besoin). Peut-être que quelqu'un a une autre approche, mais merci. Au moins, aucun fichier XAML plus ... –

1

Ok, l'approche XamlReader fonctionne (petites corrections, voir le code source ci-joint) ...

Mais honnêtement, il semble un peu moche :-) Donc, si quelqu'un sait comment "attacher le regionManager dans le code", les détails sont les bienvenus. D'abord, les lignes de lecteur XAML de travail sont:

 // MISSING 
     // Creating the UserControl in CODE instead of XAML 
     var obj = (UserControl)XamlReader.Parse(@"<UserControl xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" 
                   xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" 
xmlns:cal=""clr-namespace:Microsoft.Practices.Composite.Presentation.Regions;assembly=Microsoft.Practices.Composite.Presentation"" 
Height=""Auto"" Width=""Auto""> 
    <ItemsControl cal:RegionManager.RegionName=""ItemsControlRegionAdapterTestRegion""/></UserControl>"); 

     // Create the UserControl and add it to the main window 
     regionManager.AddToRegion(RegionNames.MainRegion, obj); 

IT !! GOT (Au moins il fonctionne, pas sûr que les meilleures pratiques)

 var uC = new UserControl(); 
     var iC = new ItemsControl(); 
     uC.Content = iC; 

     RegionManager.SetRegionName(iC, "ItemsControlRegionAdapterTestRegion"); 

     regionManager.AddToRegion(RegionNames.MainRegion, uC); 

Merci pour toute l'aide ... Commentaires toujours les bienvenus ...

+0

Notez que cette façon "moche" est en fait la façon recommandée par Microsoft. La méthode du code seulement est encore plus laide, et si vous le souhaitez, je peux aussi poster ça. –

+0

Voulez-vous dire qu'il est recommandé avec des exemples plus complexes d'utiliser le lecteur XAML. Parce que dans cette (très très simple) chose, j'aime mieux le code approche .. (n'était pas si difficile, il suffit de le regarder quelques fois avec un apport créatif de votre côté :-) –

+0

Ceci est la bonne façon de fais ceci. Notez que l'ordre dans lequel vous exécutez AddToRegion et SetRegionName n'a pas d'importance. Juste un conseil. –

Questions connexes