Gestor de ventanas (Window Manager) en Silverlight 2

silverwindow He creado un pequeño gestor de ventanas como libreria para Silverlight 2, que permite añadir cualquier FrameworkElement embebido en una ventana, que se puede mover (desde la barra de título), redimensionar (desde la esquina inferior derecha),  colapsar (botón _) y cerrar (botón X). Además las ventanas pueden ser ordenadas en cascada ó en mosaico.

La clase se llama SilverWindowManager, hereda de Canvas, y lo que hace es crear unos elementos llamados SilverWindow, que son UserControl, y conectar 5 eventos entre ventana y escritorio, dos del “escritorio” a la ventana para que se puedan realizar las acciones de mover y redimensionar, y 3 de la ventana al escritorio para informar cuando se activa ó cierra una ventana. SilverWindow usa el FrameworkElement que se le pasa en el constructor para rellenar su espacio de trabajo. Cualquier FrameworkElement es bueno, desde por ejemplo MediaElement para poner un video, como un UserControl, de hecho lo que este ejemplo abre cada vez es una nueva instancia de un UserControl llamado DummyUserCtrl que tiene un color de fondo aleatorio.

 

Hay una cosa con la que no estoy muy contento, y es el comportamiento de redimensionar, primero porque parece que redimensiona a menos velocidad de la que se mueve el puntero y no consigo ver por que, y segundo porque al moverse el puntero fuera de la zona de redimensionamiento mientras esta redimensionando, hace que el evento MouseLeftButtonUp pase en cualquier sitio… y al ser incomprensiblemente de tipo Direct en lugar de Bubbling (su homólogo en WPF también es Direct, pero además tiene un MouseUp de tipo Bubbling), si se libera sobre un TextBox ó Botón parece que se queda la acción enganchada hasta el siguiente “mouse up” porque el evento se corta en ese control. Asi que si alguien le echa un vistazo al código y ve el porque de estos problemas… le estaria muy agradecido si me lo dice 😀

El diseño no es muy allá, pero es que ni todavía me he puesto a utilizar Expression Blend 2… ni todavía estoy muy puesto en cuestiones de diseño gráfico 😀

Esta es mi 4º experimento con Silvelight 2, y la verdad es que esta bastante limitado con respecto a su hermano mayor WPF(con el que batallo dia a dia), se echan mucho de menos los estilos implícitos, los triggers, las opciones de databinding como ElementName y RelativeSource, la distribución de eventos, el botón derecho y central del ratón… los triggers… y supongo que habrá más cosas que no están… ya los iré echando en falta 😛 Pero bien lo vale por lo pequeño que es el runtime, me gusta bastante 😀

 

Gestor de ventanas (Window Manager) en Silverlight 2 | vtortola.NET