Social Icons

lunes, 20 de febrero de 2012

MessageBox, DialogBox y ventanas Popup en Silverlight con el control ChildWindow

Ya sé que esto lleva ahí desde Silverlight 3, ¡pero yo no lo sabía! ¿De verdad? No me lo puedo creer...

Así que para mi esto es nuevo, y tiene muy buena pinta. Yo siempre había creado controles de usuario para estas cosas, pero este ChildWindow tiene hasta animaciones…

Crearlo es tan simple como añadir un elemento de este tipo a nuestro proyecto:

Crear una nueva Silverlight Child Window
Después solo tienes que modificar un poco el XAML para que tenga el aspecto que necesitas y listo.

Para usarlo tienes que crear el objeto y mostrarlo así:
MessageWindow window = new MessageWindow("Info!", string.Format("This is a ChildWindow example."), true);
window.Show();

Como siempre, hay un problema. Los objetos MessageBox o DialogBox paran el hilo esperando una respuesta, mientras que el control ChildWindow no (esto también es bueno en algunos casos, de hecho he notado últimamente que los MessageBox consumen un montón de recursos) así que si necesitas usar la respuesta que el usuario ha seleccionado en tu ChildWindow tendrás que suscribirte al evento Close, algo como esto:
MessageWindow window = new MessageWindow("Info!", string.Format("This is a ChildWindow example."), true);
window.Show();

window.Closed += (sndr, args) =>
{
    if (window.DialogResult == true)
    {
        StratexWS.GetFBAUsersAsync();
        LoadingWindow.Show();
    }
};

Yo he cambiado un poco el código por defecto. Me ha quedado así::

Ejemplo de ChildWindow
Por cierto, hay por lo menos otro problema. Estos controles no funcionan si se llaman en el constructor… solo funcionan después de que el control haya cargado completamente (http://vanderbiest.org/blog/2010/08/03/silverlight-4-childwindow-is-not-visible/)

No hay comentarios: