Barra de progresso de notificação do sistema e associação de dados
Uma barra de progresso na notificação do sistema permite que você transmita o status das operações de longa duração para o usuário, como downloads, renderização de vídeo, metas de exercício e muito mais.
Importante
Requer a Atualização para Criadores e a 1.4.0 da biblioteca de Notificações: você deve direcionar o SDK 15063 e estar executando o build 15063 ou posterior para usar barras de progresso em notificações do sistema. Você deve usar a versão 1.4.0 ou posterior da biblioteca NuGet de Notificações do Kit de Ferramentas da Comunidade UWP para construir a barra de progresso no conteúdo do sistema.
Uma barra de progresso dentro de uma notificação do sistema pode ser "indeterminada" (nenhum valor específico, pontos animados indicam que uma operação está ocorrendo) ou "determinante" (um percentual específico da barra é preenchido, como 60%).
APIs importantes: classe NotificationData, método ToastNotifier.Update, classe ToastNotification
Observação
Somente a Área de trabalho oferece suporte às barras de progresso em notificações do sistema. Em outros dispositivos, a barra de progresso será descartada da notificação.
A imagem abaixo mostra uma barra de progresso determinada com todas as propriedades correspondente identificadas.
![Notificação do sistema com propriedades da barra de progresso rotuladas](images/toast-progressbar-annotated.png)
Propriedade | Type | Obrigatório | Descrição |
---|---|---|---|
Título | string ou BindableString | false | Obtém ou define uma sequência de título opcional. Suporte à associação de dados. |
Valor | dobro ou AdaptiveProgressBarValue ou BindableProgressBarValue | false | Obtém ou define o valor da barra de progresso. Suporte à associação de dados. Assume o padrão de 0. Pode ser um duplo entre 0,0 e 1,0; AdaptiveProgressBarValue.Indeterminate ou new BindableProgressBarValue("myProgressValue") . |
ValueStringOverride | string ou BindableString | false | Obtém ou define uma sequência para exibição em vez da sequência de percentual padrão. Caso não seja fornecida, algo como "70%" será exibido. |
Status | string ou BindableString | true | Obtém ou define uma sequência de status (obrigatória), que é exibida abaixo da barra de progresso à esquerda. Essa sequência deve refletir o status da operação, como "Baixando..." ou "Instalando..." |
Veja como você pode gerar a notificação acima...
new ToastContentBuilder()
.AddText("Downloading your weekly playlist...")
.AddVisualChild(new AdaptiveProgressBar()
{
Title = "Weekly playlist",
Value = 0.6,
ValueStringOverride = "15/26 songs",
Status = "Downloading..."
});
No entanto, você deve atualizar dinamicamente os valores da barra de progresso para que seja realmente "dinâmica". Isso pode ser feito usando associação de dados para atualizar a notificação do sistema.
Uso da associação de dados para atualizar uma notificação do sistema
O uso da associação de dados envolve as seguintes etapas...
- Construir o conteúdo da notificação do sistema que utiliza os campos de dados associados
- Atribuir uma Marca (e, opcionalmente, um Grupo) à ToastNotification
- Definir os valores de Dados iniciais na ToastNotification
- Enviar a notificação do sistema.
- Utilizar a Marca e Grupo para atualizar os valores de Dados com os novos valores
O trecho de código a seguir mostra as etapas 1 a 4. O trecho a seguir mostrará como atualizar a os valores de Dados da notificação do sistema.
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);
}
Em seguida, quando você quiser alterar os valores de Dados, use o método Update para fornecer os novos dados sem reconstruir o conteúdo inteiro da notificação do sistema.
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);
}
O uso do método Update em vez da substituição da notificação inteira garante que a notificação do sistema permaneça na mesma posição na Central de ações e não se mova para cima ou para baixo. Seria muito confuso para o usuário ver a notificação do sistema mudar para a parte superior da Central de ações a cada segundo enquanto a barra de progresso é preenchida.
O método Update retorna uma enumeração, NotificationUpdateResult, que permite a você saber se a atualização foi bem-sucedida ou se não foi possível encontrar a notificação (ou seja, o usuário provavelmente ignorou a notificação e você deve parar de enviar atualização dela). Não recomendamos enviar outra notificação até que a operação em andamento seja concluída (por exemplo, quando o download é concluído).
Elementos que oferecem suporte à associação de dados
Os seguintes elementos em notificações do sistema oferecem suporte à associação de dados
- Todas as propriedades em AdaptiveProgress
- A propriedade Text nos elementos de nível superior de AdaptiveText
Atualizar ou substituir uma notificação
Desde o Windows 10, você sempre pode substituir uma notificação ao enviar uma nova notificação do sistema com a mesma Marca e Grupo. Então, qual é a diferença entre substituir a notificação do sistema e atualizar os dados da notificação?
Substituir | Atualizar | |
---|---|---|
Posição na Central de Ações | Move a notificação para o tipo da Central de ações. | Deixa a notificação sem alterações na Central de ações. |
Modificar o conteúdo | Pode alterar completamente todo o conteúdos/layout da notificação do sistema | Pode alterar somente as propriedades que oferecem suporte à associação de dados (barra de progresso e texto de nível superior) |
Reaparece como pop-up | Podem reaparecer como um pop-up de notificação do sistema se você deixar SuppressPopup definida como false (ou definida como true para enviá-la silenciosamente à Central de ações) |
Não reaparece como um pop-up; os dados da notificação do sistema são atualizados silenciosamente na Central de ações |
Ignorado pelo usuário | A notificação substituta sempre será enviada independentemente do usuário ignorar a notificação anterior | Se o usuário ignorou a notificação do sistema, ocorre falha na atualização dela |
Em geral, a atualização é útil para...
- Informações que mudam frequentemente em um curto período de tempo e não exigem a atenção imediata do usuário
- Alterações sutis de conteúdo de notificação do sistema, como alterar 50% para 65%
Muitas vezes, após a conclusão da sequência de atualizações (como o fim do download do arquivo), recomendamos a substituição como a etapa final, pois...
- A notificação final provavelmente tem alterações de layout drásticas, como a remoção da barra de progresso, adição de novos botões etc
- O usuário talvez tenha ignorado sua notificação de progresso pendente, pois eles não se preocupam em assistir o download, mas ainda querem ser notificados com um pop-up de notificação do sistema quando a operação é concluída
Tópicos relacionados
Windows developer
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de