Compartir a través de


Barra de progreso del sistema y enlace de datos

El uso de una barra de progreso dentro de la notificación emergente, le permite transmitir el estado de las operaciones de larga duración al usuario, como descargas, procesamiento de video, metas de ejercicio, etc.

Important

requiere Creators Update y 1.4.0 de la biblioteca de notificaciones: debe tener como destino el SDK 15063 y ejecutar la compilación 15063 o posterior para usar barras de progreso en notificaciones del sistema. Debes usar la versión 1.4.0 o posterior de la biblioteca de notificaciones del Kit de herramientas de la comunidad UWP para NuGet para construir la barra de progreso en el contenido de tus notificaciones toast.

Una barra de progreso dentro de una notificación del sistema puede ser "indeterminada" (ningún valor específico, los puntos animados indican que se está produciendo una operación) o "determinate" (se rellena un porcentaje específico de la barra, como 60%).

API importantes: clase NotificationData, método ToastNotifier.Update, clase ToastNotification

Note

Solo el sistema operativo de escritorio admite barras de progreso en las notificaciones emergentes. En otros dispositivos, la barra de progreso se quitará de la notificación.

En la imagen siguiente se muestra una barra de progreso determinada con todas sus propiedades correspondientes etiquetadas.

Tostada con propiedades de barra de progreso etiquetadas
Property Type Required Description
Title cadena o BindableString false Obtiene o establece una cadena de título opcional. Admite la vinculación de datos.
Value double o AdaptiveProgressBarValue o BindableProgressBarValue false Obtiene o establece el valor de la barra de progreso. Admite la vinculación de datos. El valor predeterminado es 0. Puede ser un doble entre 0,0 y 1,0, AdaptiveProgressBarValue.Indeterminateo new BindableProgressBarValue("myProgressValue").
ValueStringOverride cadena o BindableString false Obtiene o establece una cadena opcional que se va a mostrar en lugar de la cadena de porcentaje predeterminada. Si no se proporciona esto, se mostrará algo parecido a "70%".
Status cadena o BindableString true Obtiene o establece una cadena de estado (obligatorio), que se muestra debajo de la barra de progreso de la izquierda. Esta cadena debe reflejar el estado de la operación, como "Descargar..." o "Instalar..."

Aquí se muestra cómo generaría la notificación que se ha visto anteriormente...

new ToastContentBuilder()
    .AddText("Downloading your weekly playlist...")
    .AddVisualChild(new AdaptiveProgressBar()
    {
        Title = "Weekly playlist",
        Value = 0.6,
        ValueStringOverride = "15/26 songs",
        Status = "Downloading..."
    });

Sin embargo, deberá actualizar dinámicamente los valores de la barra de progreso para que realmente sea "activo". Esto se puede hacer mediante el enlace de datos para actualizar la notificación del sistema.

Uso del enlace de datos para actualizar una notificación del sistema

El uso del enlace de datos implica los pasos siguientes...

  1. Crear contenido de notificación que utiliza campos enlazados a datos
  2. Asigne una Etiqueta (y, opcionalmente, un Grupo ) a su Notificación de Toast
  3. Defina sus valores iniciales de Data en su ToastNotification
  4. Enviar la notificación del sistema
  5. Utiliza etiqueta y grupo para actualizar los datos valores con nuevos valores

En el siguiente fragmento de código se muestran los pasos 1 a 4. El siguiente fragmento de código mostrará cómo actualizar los valores de la notificación datos.

using Windows.UI.Notifications;
using Microsoft.Toolkit.Uwp.Notifications;
 
public void SendUpdatableToastWithProgress()
{
    // Define a tag (and optionally a group) to uniquely identify the notification, in order update the notification data later;
    string tag = "weekly-playlist";
    string group = "downloads";
 
    // Construct the toast content with data bound fields
    var content = new ToastContentBuilder()
        .AddText("Downloading your weekly playlist...")
        .AddVisualChild(new AdaptiveProgressBar()
        {
            Title = "Weekly playlist",
            Value = new BindableProgressBarValue("progressValue"),
            ValueStringOverride = new BindableString("progressValueString"),
            Status = new BindableString("progressStatus")
        })
        .GetToastContent();
 
    // Generate the toast notification
    var toast = new ToastNotification(content.GetXml());
 
    // Assign the tag and group
    toast.Tag = tag;
    toast.Group = group;
 
    // Assign initial NotificationData values
    // Values must be of type string
    toast.Data = new NotificationData();
    toast.Data.Values["progressValue"] = "0.6";
    toast.Data.Values["progressValueString"] = "15/26 songs";
    toast.Data.Values["progressStatus"] = "Downloading...";
 
    // Provide sequence number to prevent out-of-order updates, or assign 0 to indicate "always update"
    toast.Data.SequenceNumber = 1;
 
    // Show the toast notification to the user
    ToastNotificationManager.CreateToastNotifier().Show(toast);
}

A continuación, cuando desee cambiar los valores de Data, use el método Update para proporcionar los nuevos datos sin volver a construir toda la carga toast.

using Windows.UI.Notifications;
 
public void UpdateProgress()
{
    // Construct a NotificationData object;
    string tag = "weekly-playlist";
    string group = "downloads";
 
    // Create NotificationData and make sure the sequence number is incremented
    // since last update, or assign 0 for updating regardless of order
    var data = new NotificationData
    {
        SequenceNumber = 2
    };

    // Assign new values
    // Note that you only need to assign values that changed. In this example
    // we don't assign progressStatus since we don't need to change it
    data.Values["progressValue"] = "0.7";
    data.Values["progressValueString"] = "18/26 songs";

    // Update the existing notification's data by using tag/group
    ToastNotificationManager.CreateToastNotifier().Update(data, tag, group);
}

El uso del método Update en lugar de reemplazar toda la notificación "toast" también garantiza que la notificación permanezca en la misma posición en el Centro de actividades y no se mueva hacia arriba o hacia abajo. Sería bastante confuso para el usuario si la notificación del sistema se mantiene saltando a la parte superior del Centro de actividades cada pocos segundos mientras la barra de progreso se llena!

El método Update devuelve una enumeración , NotificationUpdateResult, que le permite saber si la actualización se realizó correctamente o si no se encontró la notificación (lo que significa que el usuario probablemente ha descartado la notificación y debe dejar de enviar actualizaciones a ella). No se recomienda mostrar otra notificación emergente hasta que se haya completado la operación en curso (como cuando se haya completado la descarga).

Elementos que admiten el enlace de datos

Los siguientes elementos en las notificaciones emergentes admiten la vinculación de datos.

  • Todas las propiedades de AdaptiveProgress
  • La propiedad Text en los elementos AdaptiveText de nivel superior

Actualizar o reemplazar una notificación

Desde Windows 10, siempre podrías reemplazar una notificación enviando una nueva toast con la misma Etiqueta y Group. ¿Cuál es la diferencia entre reemplazar la notificación del sistema y actualizando los datos del sistema?

Replacing Updating
Posición en Action Center Mueve la notificación a la parte superior del Centro de actividades. Deja la notificación en su lugar en el Centro de actividades.
Modifying content Puede cambiar completamente todo el contenido o el diseño del mensaje emergente. Solo se pueden cambiar las propiedades que admiten el enlace de datos (barra de progreso y texto de nivel superior)
Reaparecer como ventana emergente Puede volver a aparecer como un elemento emergente de notificación del sistema si deja SuppressPopup establecido en false (o lo establece en true para enviarlo silenciosamente al Centro de actividades). No volverá a aparecer como un elemento emergente; los datos de la notificación se actualizan silenciosamente en el Centro de Acciones.
User dismissed Independientemente de si el usuario descartó tu notificación anterior, siempre se enviará la notificación de reemplazo. Si el usuario descartó el mensaje emergente, la actualización del toast fallará.

En general, la actualización de es útil para...

  • Información que cambia con frecuencia en un breve período de tiempo y no requiere que se le preste atención al usuario
  • Cambios sutiles en el contenido del toast, como cambiar 50% a 65%

A menudo, después de que se haya completado la secuencia de actualizaciones (por ejemplo, cuando se ha descargado el archivo), recomendamos realizar el paso final de reemplazo, porque...

  • Es probable que la notificación final tenga cambios de diseño drásticas, como la eliminación de la barra de progreso, la adición de nuevos botones, etc.
  • Es posible que el usuario haya descartado la notificación de progreso pendiente porque no le interesa ver la descarga, pero aún desea recibir un aviso emergente cuando se complete la operación.