Gestor de ventanas (Window Manager) en Silverlight 2

by Valeriano Tortola 8. febrero 2009 20:31

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 :D

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 :D

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 :P Pero bien lo vale por lo pequeño que es el runtime, me gusta bastante :D

Tags:

C# 3.0 | .NET 3.5 | Silverlight 2

Comentarios

16/02/2009 12:04:07 #

pvila

Hola Vicente, me ha gustado mucho tu idea; te planteo el siguiente escenario de aplicación: un conjunto de ventanas flotantes sobre un div de Google Maps o Virtual Earth usando el 100% del area. En estos casos se necesita que los eventos de mouse pasen directa o indirectamente al div del mapa, para no perder la funcionalidad de navegación. Has contemplado esa opción?
Saludos, PV

pvila |

17/02/2009 23:05:50 #

vtortola

Hola,

Todavia no me he puesto a trabajar con el combo Javascript/Silverlight. Tengo aqui un libro que habla bastante del tema y espero ponerme con ello en breve, seria interesante...

vtortola Irlanda |

25/03/2009 13:33:52 #

Tomás Crespo

Me parece genial lo que has hecho, enhorabuena

Tomás Crespo España |

29/03/2009 19:16:39 #

vtortola

Gracias Smile

vtortola Irlanda |

Comentarios no permitidos