Alerta! Notificando al usuario

Una notificación es un área de la Interfaz de usuario que se muestra un período de tiempo y se cierra automáticamente aun cuando no se produzca ninguna interacción con el usuario.

Los sistemas que implementan notificaciones normalmente las tienen que mostrar en un área fija, determinada de la Interfaz de usuario.

Un término coloquial alternativo para las notificaciones que utilizan algunos programadores es toast.
Las notificaciones son exclusivamente para uso en un escenario de aplicación de ejecución fuera del explorador en Silverlight..

Similar al control Popup, el contenido de una ventana de notificación no forma parte del árbol visual primario de Silverlight, si no que forma parte de un árbol visual independiente que se representa y se agrega al área de contenido.

Para fines de resolución del ámbito de nombres de XAML, los objetos de una ventana de notificación existen en un ámbito de nombres de XAML independiente.

El uso de un control Popup no se admite dentro de una ventana de notificación.

Debe establecer las propiedades Height y Width antes de que se llame al método Show y se muestre la notificación.

Intentar establecer el alto/ancho de una notificación que ya se está mostrando produce una excepción. Puede resultar interesante comprobar el valor actual de la propiedad Visibility para evitar la excepción.

Interacción del usuario con una ventana de notificación

El contenido de una notificación no puede recibir foco del teclado ni procesar eventos de teclado.

Conceptualmente, el contenido de una notificación se debe considerar como de solo lectura.

Normalmente, el usuario ve la notificación pero sabe que desaparecerá sin hacer nada.

El contenido de una notificación puede recibir entrada de mouse o de lápiz y puede procesar los eventos del mouse.

Puede controlar estos eventos de entrada para introducir la ventana de aplicación principal en el foco, llamando a Window.Activate.

Esto es para un escenario donde el usuario ha pasado a otra aplicación y la aplicación que posee la notificación no está en la ventana siempre visible.

Ejemplos de características que requieren la iniciación del usuario y por eso no se pueden invocar desde la ventana de notificación de la Interfaz de usuario incluyen: navegar de HyperlinkButton; mostrar SaveFileDialog o OpenFileDialog; tener acceso al portapapeles del sistema; cambiar al modo de pantalla completa.

Llamar a Window.Activate es esencialmente la única acción con privilegios que se puede iniciar desde un manejador de evento de entrada para el contenido de la ventana de notificación.

Posición y dimensiones de las notificaciones

Cuando se llama al método Show, se coloca la notificación de forma que la esquina inferior derecha del área de contenido de notificación tenga (-44, -44) de desplazamiento de píxeles desde la esquina inferior derecha de las dimensiones del área de trabajo del monitor primario.

Las propiedades Height y Widthagregan a las dimensiones de la ventana hacia arriba y a la izquierda de las direcciones, respectivamente, partiendo del punto de la posición inferior derecho.

Cola de notificaciones

La clase NotificationWindow no admite directamente la cola ni la lógica de representación de varias notificaciones.

Si nuestra aplicación llama de nuevo a Show en una segunda instancia de ventana de notificación mientras todavía se muestra la notificación anterior, se produce una excepción en el método Show.

Deberemos implementar nuestra propia lógica de cola para administrar varias notificaciones iterando por las notificaciones. O podríamos mostrar una notificación dedicada que indique que varias notificaciones desean mostrarse y, a continuación, utilizar una Interfaz de usuario alternativa para el caso de varias notificaciones.

Aunque sólo se permite una ventana de notificación por aplicación, es posible que varias aplicaciones de ejecución fuera del explorador de Silverlight se ejecuten simultáneamente y que cada una muestre una ventana de notificación.

En este caso, las notificaciones aparecen en el mismo lugar pero pueden superponerse, con la notificación mostrada recientemente en la parte superior.

Ejemplo de uso

El siguiente código de ejemplo muestra varios aspectos de crear y mostrar una ventana de notificación.

Para ilustrar estos conceptos haremos uso de una interfaz de usuario compuesta por un botón que lance las notificaciones y una pequeña área donde mostraremos el contenido de la notificación en respuesta a la interacción del usuario.


Figura 1.- Diseño de interfaz


Figura 2.- XAML de la interfaz de usuario


Figura 3.- Código encargado de mostrar la notificación.

Si observamos el código necesario para mostrar la notificación, veremos que nuestro primer paso es una comprobación de que nos estamos ejecutando fuera del navegador.

Otro punto interesante en el código es la llamada al método Show, recordemos que en ésta indicamos la duración con la que la notificación es mostrada al usuario.

Por último no podemos olvidarnos de devolver el foco de ejecución a la aplicación.


Figura 4.- Especificamos que la aplicación se ejecuta fuera del navegador.

Conclusión

Con el uso del control NotificationWindowpodemos crear escenarios de aplicaciones con alertas y notificaciones de un modo muy sencillo. Esto nos permite crear aplicaciones en escenarios de tiempo real donde el usuario siempre está al tanto de los cambios producidos en la aplicación.

Podemos descargar el ejemplo desde: Notificaciones.zip