2009-06-18 17 views
11

Tengo una aplicación WPF compuesta. En uno de mis módulos quiero hacer un asistente y mostrar los pasos en una región para poder cambiar entre los pasos más fácilmente. Originalmente tenía este asistente en una región de pestaña y la región anidada funcionaba bien. Ahora quiero convertirlo en un cuadro de diálogo modal, pero después de abrirlo, la región interna nunca se registra con el administrador de región; Entonces no puedo agregar mis pasos de asistente.WPF, Prisma v2, Región en un cuadro de diálogo modal, agregar región en el código detrás de

Tenía la impresión de que el gestor de región era global, y simplemente añadiendo cal: RegionManager.RegionName = "WizardSteps" lo haría, pero aparentemente no.

si paso el gestor de la región a la vista que podría ser capaz de usarlo ... ¿Alguien sabe cómo añadir una región a ContentControl en código detrás?

Respuesta

17

El problema es que las regiones de búsqueda en el árbol visual de la propiedad adjunta RegionManager, y luego se registran con el gerente. En la ventana principal está bien, pero en una ventana secundaria esto no sucede.

En el Bootstrapper, después de crear la cáscara, se realiza el siguiente código.

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

Para obtener el gestor de la región para trabajar con su ventana secundaria hacer lo mismo justo después de haber creado la ventana.

EDITAR

Para establecer el nombre de la región de un control, también se establece la propiedad adjunta de la RegionManager, al igual que ...

RegionManager.SetRegionName(control, "MyRegion"); 

Sin embargo, usted puede hacer esto en aswell xaml. La razón por la cual sus regiones en una ventana separada no funcionan es porque el RegionManager necesita establecerse en la ventana base, como mostré anteriormente.

+0

Este código no parece que me ayude a ninguna, mi RegionManager no parecen tener un fucntion llamada SetRegionManager(), o UpdateRegions(). ¿No hay forma de crear una nueva región en el código? – Shaboboo

+2

Se trata de llamadas estáticas en la clase RegionManager, no de métodos de instancia. También actualizaré mi respuesta para mostrar cómo crear regiones en el código. –

+0

Gracias por señalar el método estático de RegionManager para establecer el nombre de la región. ¡Eso era exactamente lo que estaba buscando! –

0

Encontré algo que casi funciona. Estoy seguro de que si pudiera vincular la vista activa de la región a la propiedad de contenido de contentContol, funcionaría, pero aún no lo he logrado.

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

En realidad es bastante simple.

En su ventana emergente, añada un nombre de región como lo hace en el intérprete de comandos. Entonces en el constructor de ventanas emergentes, agregue la siguiente llamada:

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

Esto funciona para mí en Prism versión 1 - no debe ser demasiado diferente en versiones posteriores.

Cuestiones relacionadas