2009-06-18 12 views
11

Ho un'applicazione WPF composita. In uno dei miei moduli voglio fare un wizard e fare in modo che i passaggi vengano visualizzati in una regione, così posso passare da una procedura all'altra. Originariamente avevo questo wizard mostrato in una regione di schede e la regione nidificata funzionava bene. Ora voglio trasformarlo in una finestra di dialogo modale, ma dopo averlo aperto la regione interna non viene mai registrata con il manager della regione; Quindi non posso aggiungere i miei passaggi del wizard.WPF, Prisma v2, Area in una finestra di dialogo modale, aggiungi regione nel codice dietro

Avevo l'impressione che il gestore della regione fosse globale e aggiungendo solo cal: RegionManager.RegionName = "WizardSteps" lo farebbe, ma apparentemente no.

Se si passa il gestore regione alla vista, potrei essere in grado di usarlo ... Qualcuno sa come aggiungere una regione a un ContentControl nel codice sottostante?

risposta

17

Il problema è che le regioni cercano l'albero visivo per la proprietà associata a RegionManager e quindi si registrano con quel gestore. Nella finestra principale va bene, ma in una finestra figlia questo non succede.

Nel Bootstrapper, dopo aver creato la shell, viene eseguito il codice seguente.

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

Per ottenere il manager regione a lavorare con il vostro finestra figlio fare la stessa cosa a destra dopo aver creato la finestra.

EDIT

Per impostare il nome della regione di un controllo, è possibile impostare anche la proprietà allegato del RegionManager, in questo modo ...

RegionManager.SetRegionName(control, "MyRegion"); 

Tuttavia si può fare questo in XAML pure. Il motivo per cui le regioni in una finestra separata non funzionano è perché il RegionManager deve essere impostato sulla finestra di base, come mostrato sopra.

+0

Questo codice non sembra essermi d'aiuto, il mio regionmanager non sembra avere una funzione chiamata SetRegionManager() o UpdateRegions(). Non c'è modo di creare una nuova regione nel codice? – Shaboboo

+2

Queste sono chiamate statiche sulla classe RegionManager, non sui metodi di istanza. Inoltre aggiornerò la mia risposta per mostrare come creare regioni nel codice. –

+0

Grazie per aver indicato il metodo statico di RegionManager per impostare il nome della regione. Era esattamente quello che stavo cercando! –

0

Ho trovato qualcosa che funziona quasi. Sono sicuro che se potessi associare la vista attiva della regione alla proprietà content di contentContol funzionerebbe, ma non l'ho ancora gestita.

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

Esso è in realtà abbastanza semplice.

Nel tuo popup xaml aggiungi un nome di regione come fai nella shell. Poi nel costruttore popup, aggiungere il seguente invito:

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

Questo funziona per me in Prism v.1 - non dovrebbe essere troppo diverso nelle versioni successive.

Problemi correlati