domingo, enero 09, 2011

Encontrar Ventana Que Contiene un Control WPF

El post anterior fue sobre como mostrar Ventanas Modales. Ahora para ventanas modales necesitabamos una referencia a Una Ventana para el atributo Owner de nuestro Modal.

Resulta que si nuestra ventana principal (desde la que llamamos al modal)contiene controles de usuario dentro de ella es probable (muy probable que terminemos creando una modal desde un control de usuario . como consecuencia de esto no tendremos la referencia a una ventana para establecer el owner a menos que se la pasemos al contro de usuario al construirlo.

Bueno para encontrar la ventana que contiene nuestro control de usuario ( no solo los nuestros me refiero a cualquier control) tendremos que buscar hacia arriba entre los controles que contienen al nuestro hasta encontrar un objeto que Windows que sirva para nuestro proposito.

Este seria el codigo que sirve para eso:

DependencyObject parent = nuestroControl;

do

{

parent = LogicalTreeHelper.GetParent(parent);

if (parent==null)

{

return null;

}

}

while (parent.GetType().BaseType != typeof(Window));

WindowParent = (parent as Window)



No hay nada del otro mundo aqui. La Clase LogicalTreeHelper Sirve para recorrer el arbol de controles de la aplicacion. (http://msdn.microsoft.com/es-cl/library/system.windows.logicaltreehelper.aspx)
 Esta Linea:

while (parent.GetType().BaseType != typeof(Window));
 
pregunta por el tipo del contro encontrado . Usamos BaseType porque nuestras ventanas heredan de Window asi que GetType() no devuelve Window precisamente (pero si heredan de el)

No hay comentarios:

Publicar un comentario