Cómo mostrar notificaciones con texto, imágenes y botones de acción (enriquecidas) en el área de notificación de Windows, usando C# de Visual Studio .Net. Estas notificaciones se integrarán con el centro de notificaciones del equipo.

Crear proyecto C# en Visual Studio .Net e instalar Microsoft.Toolkit.Uwp.Notifications

En primer lugar, desde Visual Studio .Net, crearemos un proyecto de tipo Aplicación de Windows Forms y con el lenguaje C#:

Estableceremos el nombre del proyecto y la carpeta donde se guardarán los ficheros:

Es muy importante elegir un .NET compatible con el paquete que usaremos para las notificaciones enriquecidas, que es Microsoft.Toolkit.Uwp.Notifications y requiere de .NET 6 o superior:

Una vez creado nuestro proyecto, instalaremos el paquete Nuget Microsoft.Toolkit.Uwp.Notifications. Para ello, accederemos al menú «Herramientas» – «Administrador de paquetes NuGet» – «Administrar paquetes NuGet para la solución…»:

Pulsaremos en «Examinar» y buscaremos «Microsoft.Toolkit.Uwp.Notifications». Elegiremos el paquete «Microsoft.Toolkit.Uwp.Notifications» en su versión 7.1.3. Pulsaremos en «Instalar»:

Aplicaremos los cambios en la solución:

Aceptaremos los términos de licencia:

El paquete quedará instalado para nuestro proyecto y referenciado para su uso:

Para que el paquete Microsoft.Toolkit.Uwp.Notifications funcione correctamente, nuestro proyecto debe tener la compatibilidad del SO en Windows 10, al menos. Para establecerla, pulsaremos en el menú «Proyecto» y en las propiedades del proyecto:

En «Sistema operativo de destino» elegiremos «Windows 10.0.17763.0»:

Mostrar notificación Toast con texto (título y cuerpo)

Como ejemplo, añadiremos un botón al formulario de la aplicación formNotificaciones.cs, para mostrar una notificación enriquecida simple (solo texto). En el evento Click del botón, añadiremos el siguiente código:

Si compilamos la aplicación y pulsamos el botón, mostrará una notificación con este formato:

Dado que estas notificaciones se integran con las del sistema Windows, el usuario podrá interacturar con ellas y decidir si las desactiva, si permanecen en el histórico o si las lee (pulsando sobre ella).

Como se puede apreciar, aparece el icono y el nombre del proyecto, que deberemos añadir convenientemente. Para asignar un icono al proyecto accederemos al menú «Proyecto» y a las propiedades. En «Recursos de Win32», en «Icono», elegiremos un fichero de icono para nuestra aplicación (este será el que se muestre en la notificación enriquecida):

Por su parte, estableceremos el nombre del ensamblado, que será el que aparezca en la barra de título de la notificación enriquecida, a la derecha del icono:

Mostrar notificación Toast con texto e imágenes

También podremos mostrar imágenes en la notificación. Como ejemplo, añadiremos dos imágenes, una encima de la propia notificación y la otra debajo del texto de la notificación. Añadiremos otro botón y le asignaremos este código:

Teniendo en cuenta que las imágenes deben existir en la ruta y nombre indicados. Al ejecutar nuestra aplicación y pulsar en el botón para mostrar una notificación Toast con imágenes, aparecerá en el área de notificación con este formato:

Ocultar todas las notificaciones

Si queremos ocultar todas las notificaciones generadas en nuestra aplicación, usaremos:

Mostrar notificación Toast con imagen y botones de acción

Para mostrar una notificación Toast con imagen y botones de acción, usaremos el siguiente método, que mostrará la notificación con un botón de ejemplo con el texto «Visitar ProyectoA» y otro de «Cerrar»:

Añadiremos el siguiente código al botón correspondiente:

Los botones de acción necesitan que se capture su pulsación y quede identificado qué botón se ha pulsado, en base al argumento «IDNotificacion» de la notificación, que en el caso anterior tiene valor «7777» y en base al argumento «accion», «visitar» o «accion», «cerrar» de cada botón. Definiremos un método en el mismo fichero formNotificaciones.cs donde hemos definido la notificación con los botones con el siguiente código C#:

Añadiemos un icono al botón «Visitar ProyectoA» para comprobar que también admite iconos.

En el método anterior capturamos la pulsación de los dos botones usando IDNotificacion = «7777», asignando una acción (un bloque de código) a cada botón.

Para que el método BotonToastPulsado funcione, tenemos que modificar el fichero principal de nuestro proyecto, que habitualmente es Program.cs y añadir el siguiente código en la clase internal static class Program:

Quedando el fichero Program.cs con el siguiente contenido:

Si ahora compilamos la aplicación y pulsamos el botón que muestra la notificación con botones:

Obtendremos este resultado:

Siendo los botones «Visitar ProyectoA» y «Cerrar» perfectamente operativos. Si pulsamos en «Visitar ProyectoA», mostrará el mensaje correspondiente y abrirá el navegador web, accediendo a «https://www.proyectoa.com». Cerrará la notificación, asumiendo que se ha «leído»:

Si se pulsa en «Cerrar», mostrará el correspondiente mensaje y cerrará la notificación (dado que se asume que se ha «leído»):

En ambos casos, si se pulsa en alguno de los botones o en la propia notificación, se cerrará y no se almacenará en el histórico de notificaciones. En cambio, si no se interactúa con la notificación, esta se cerrará transcurridos unos segundos y se almacenará en el histórico de notificaciones, como mostramos en el siguiente punto.

Mostrar notificación que captura la pulsación en el cuerpo

Si queremos que cuando el usuario pulse en la propia notificación, tanto mientras se está mostrando como cuando está en el histórico y haga alguna acción podremos usar el mismo mecanismo que para habilitar un botón de acción. O bien añadimos un argumento específico a la notificación para identificarla o bien usamos el mismo argumento que hemos definido para identificar cada conversación «IDNotificacion», este será el que usemos. Añadiremos un botón y le asignaremos el siguiente código (para mostrar una notificación con imagen y que actúe en caso de pulsación por parte del usuario):

Como ejemplo, a la notificación anterior le hemos añadido un tiempo de expiración de un minuto. Una vez transcurrido, desaparecerá del histórico.

En este caso hemos usado el argumento «IDNotificacion» con valor «5555». A continuación añadiremos el método que se ejecutará cuando se pulse sobre la notificación:

Por último, para capturar la pulsación e identificarla en la notificación «5555» añadiremos el siguiente código al método BotonToastPulsado() definido anteriormente:

Si probamos la notificación, cuando se muestra, si se pulsa sobre ella, mostrará el mensaje:

En este caso, si se cierra la aplicación y, posteriormente, el usuario pulsa en la notificación, la aplicación se volverá a abrir.

Las notificaciones quedan integradas con Windows

Al tratarse de notificaciones integradas con el sistema de notificaciones de Windows, el usuario podrá decidir si las oculta, si las desactiva:

O si las muestra o si las consulta en el área de últimas notificaciones:

En el caso de notificaciones con imagen de tipo HeroImage, ésta aparecerá en el histórico de notificaciones, siempre que haya pocas pendientes de lectura:

Código completo del formulario principal de la aplicación de ejemplo de notificaciones Toast con C#

El código completo del formulario principal formNotificaciones.cs de la aplicación de ejemplo que mustra diferentes notificaciones Toast con C#: