2009-06-18 10 views
11
hinzu

Ich habe eine zusammengesetzte WPF-Anwendung. In einem meiner Module möchte ich einen Assistenten erstellen und die Schritte in einer Region anzeigen lassen, damit ich leichter zwischen den Schritten wechseln kann. Ursprünglich hatte ich diesen Assistenten in einer Tab-Region und die verschachtelte Region funktionierte gut. Jetzt möchte ich es zu einem modalen Dialogfeld machen, aber nachdem ich es geöffnet habe, wird die innere Region nie mit dem Regionsmanager registriert; Daher kann ich meine Assistentenschritte nicht hinzufügen.WPF, Prism v2, Region in einem modalen Dialog, fügen Sie eine Region in Code hinter

Ich hatte den Eindruck, dass der Regionsmanager global war, und nur Hinzufügen von cal: RegionManager.RegionName = "WizardSteps" würde es tun, aber anscheinend nicht.

Wenn ich den Regionsmanager an die Ansicht übergebe, könnte ich sie verwenden können ... Weiß jemand, wie man eine Region zu einem ContentControl im Code hinterher hinzufügt?

Antwort

17

Das Problem besteht darin, dass Regionen den visuellen Baum nach der angefügten Eigenschaft RegionManager durchsuchen und sich dann bei diesem Manager registrieren. Im Hauptfenster ist das in Ordnung, aber in einem untergeordneten Fenster passiert das nicht.

Im Bootstrapper wird nach dem Erstellen der Shell der folgende Code ausgeführt.

RegionManager.SetRegionManager(shell, this.Container.Resolve<IRegionManager>()); 
RegionManager.UpdateRegions(); 

die Region Manager Um mit Ihrem Kind Fenster rechts das gleiche tun zu arbeiten, nachdem Sie das Fenster erstellt haben.

EDIT

Um die Region Namen einer Kontrolle festgelegt, können Sie auch die beigefügte Eigenschaft des RegionManager gesetzt, wie so ...

RegionManager.SetRegionName(control, "MyRegion"); 

auch immer Sie dies in XAML als gut tun können. Der Grund, warum Ihre Regionen in einem separaten Fenster nicht funktionieren, liegt darin, dass der RegionManager im Basisfenster eingestellt werden muss, wie ich oben gezeigt habe.

+0

Dieser Code scheint mir nicht zu helfen, mein Regionmanager scheint keine Funktion namens SetRegionManager() oder UpdateRegions() zu haben. Gibt es keine Möglichkeit, eine neue Region im Code hinterher zu erstellen? – Shaboboo

+2

Dies sind statische Aufrufe in der RegionManager-Klasse, keine Instanzmethoden. Außerdem werde ich meine Antwort aktualisieren, um zu zeigen, wie Regionen im Code erstellt werden. –

+0

Vielen Dank, dass Sie die statische Methode des RegionManager zum Festlegen des Bereichsnamens angegeben haben. Das war genau das, wonach ich suchte! –

0

Ich fand etwas, das fast funktioniert. Ich bin mir sicher, wenn ich die aktive Ansicht der Region an die Content-Eigenschaft contentContol binden könnte, dann würde es funktionieren, aber ich habe das noch nicht geschafft.

IRegionManager MyRegionManager = container.Resolve<IRegionManager>(); 
SingleActiveRegion newRegion = new SingleActiveRegion(); 
MyRegionManager.Regions.Add("WizardSteps", newRegion); 

//Binding 
Binding myBinding = new Binding("ActiveViews"); 
myBinding.Source = newRegion; 
view.stepControl.SetBinding(ContentControl.ContentProperty, myBinding); 
7

Es ist eigentlich ziemlich einfach.

In Ihrem Popup-XAML fügen Sie einen Gebietsnamen wie in der Shell hinzu. dann im Pop-ups Konstruktor, fügen Sie den folgenden Aufruf:

public Popup(IRegionManager regionManager) 
{ 
    InitializeComponent(); 
    RegionManager.SetRegionManager(this,regionManager); 
} 

Dies funktioniert für mich in Prism v.1 - sollte nicht zu viel anders in späteren Versionen sein.

Verwandte Themen