Silverlight 4 incorpora un mecanismo para notificar al usuario acerca de algún suceso ocurrido similar a cuando llega un nuevo correo en Outlook y que aparece la notificación en la esquina inferior derecha de nuestra pantalla. En este artículo veremos a detalle esta nueva API de Notificaciones y cómo implementarla en nuestras aplicaciones.
El Proyecto
Crearemos un nuevo proyecto de Silverlight 4 en Visual Studio .NET 2010 Beta 2 y le pondremos el nombre Demo.SL4.Notificaciones, aceptando las opciones por default de crear un proyecto Web para poder probar la aplicación. Además, configuraremos el proyecto de Silverlight para que la aplicación pueda ejecutar Fuera del Navegador.
Clase System.Windows.NotificationWindow
La clase NotificationWindow del espacio de nombres System.Windows es el punto de partida para crear notificaciones en nuestras aplicaciones. El contenido de una notificación es establecida a través de la propiedad Content que es de tipo FrameworkElement, una de las clases principales en la jerarquía de clases de Silverlight y por tal motivo podemos establecer como contenido de la notificación cualquier elemento visual.
La característica de Notificaciones únicamente está disponible en Aplicaciones Fuera del Navegador (por lo menos en Silverlight 4 Beta)
Métodos Show() y Close()
Por otro lado, para mostrar una notificación ejecutamos el método Show(), el cuál recibe como parámetro un número expresado en milisegundos según el tiempo que desees que dure. El siguiente código muestra la creación de una notificación, primero verificando que la aplicación esté ejecutando Fuera del Navegador:
if (
Application.
Current.
IsRunningOutOfBrowser)
{
//Crea una nueva instancia de NotificationWindow NotificationWindow nw =
new NotificationWindow();
//Crea el contenido Grid grid =
new Grid()
{
Background =
new SolidColorBrush(
Colors.
LightGray),
Width=
400,
Height=
100 };
TextBlock txt =
new TextBlock()
{
Text =
DateTime.
Now.
ToString(),
HorizontalAlignment=
System.
Windows.
HorizontalAlignment.
Center,
VerticalAlignment=
System.
Windows.
VerticalAlignment.
Top,
FontSize=
14 };
Button btn =
new Button()
{
Width =
100,
Height =
30,
Content =
"Cerrar" };
//Con el botón cerraremos la notificación btn.
Click += (
s,
a) =>
nw.
Close();
grid.Children.Add(txt);
grid.Children.Add(btn);
//Establece el contenido
nw.Content = grid;
//Muestra la notificación durante 5 segundos
nw.Show(5000);
}
En el código estamos creando un Grid de color gris que nos servirá de contenedor para un TextBlock que mostrará la fecha y hora actual, y de un botón que nos servirá para cerrar la notificación en cuestión a través del método Close().
Nota: La documentación de Silverlight 4 Beta establece que los eventos que ocurren en el contexto de la notificación no se consideran como iniciados por el usuario, por lo que no podras ejecutar código que así lo requiera (OpenFileDialog, SaveFileDialog y usar el Portapapeles son un buen ejemplo de esto), no obstante, esto es posible. No estoy seguro si esto cambie en la versión final de Silverlight 4.
El resultado:
Como podemos apreciar en la anterior figura, las notificaciones aparecerán en la esquina inferior derecha del monitor primario que tengas configurados, a una distancia de –44,-44 pixeles de distancia de la esquina; ese es el espacio vacío que se ve a la derecha y abajo de la notificación.
También podemos darnos cuenta que el área para la notificación no es más que un lienzo de 400 x 100 pixeles; y tu contenido no deberá rebasar este tamaño establecido de manera predeterminada.
Evento Closed
La clase NotificationWindow expone el evento Closed, el cual se dispara cuando cierras la notificación explícitamente usando el método Close() o cuando el tiempo en milisegundos especificado en el método Show() se ha cumplido. En la aplicación de ejemplo que aquí desarrollamos manejamos el evento para mostrar en un ListBox que una notificación ha sido cerrada; además, las notificaciones se están creando cada 10 segundos.
Resultado
Puedes descargar el código aquí
Puedes ver la demo en vivo aquí (requiere Silverlight 4 y ejecutar la aplicación Fuera del Navegador)