Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O uso de uma barra de progresso dentro da notificação toast permite que você transmita o status de operações longas para o usuário, como downloads, renderização de vídeo, metas de exercício e muito mais.
Important
requer a Atualização para Criadores e versão 1.4.0 da biblioteca de Notificações: você deve direcionar o SDK 15063 e executar o build 15063 ou posterior para usar barras de progresso em notificações do tipo toast. 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 seu toast.
Uma barra de progresso dentro de uma notificação pode ser "indeterminada" (nenhum valor específico, os pontos animados indicam que uma operação está ocorrendo) ou "determinada" (uma porcentagem específica da barra é preenchida, como 60%).
APIs importantes: classe NotificationData, método ToastNotifier.Update, classe ToastNotification
Note
Somente o Desktop dá suporte a barras de progresso em notificações toast. Em outros dispositivos, a barra de progresso será removida da notificação.
A imagem abaixo mostra uma barra de progresso determinante com todas as suas propriedades correspondentes rotuladas.
| Property | Tipo | Required | Description |
|---|---|---|---|
| Title | cadeia de caracteres ou BindableString | false | Obtém ou define uma cadeia de caracteres de título opcional. Dá suporte à associação de dados. |
| Value | double ou AdaptiveProgressBarValue ou BindableProgressBarValue | false | Obtém ou define o valor da barra de progresso. Dá suporte à associação de dados. O valor padrão é 0. Pode ser um duplo entre 0,0 e 1,0, AdaptiveProgressBarValue.Indeterminateou new BindableProgressBarValue("myProgressValue"). |
| ValueStringOverride | cadeia de caracteres ou BindableString | false | Obtém ou define uma cadeia de caracteres opcional a ser exibida em vez da cadeia de caracteres de porcentagem padrão. Se isso não for fornecido, algo como "70%" será exibido. |
| Status | cadeia de caracteres ou BindableString | true | Obtém ou define uma cadeia de caracteres de status (obrigatório), que é exibida abaixo da barra de progresso à esquerda. Essa cadeia de caracteres deve refletir o status da operação, como "Baixando..." ou "Instalando..." |
Veja como você geraria a notificação vista 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ê precisará atualizar dinamicamente os valores da barra de progresso para que ela seja realmente "dinâmica". Isso pode ser feito usando a vinculação de dados para atualizar a notificação.
Usando associação de dados para atualizar um aviso
Usar a associação de dados envolve as seguintes etapas...
- Construir conteúdo de notificação que utiliza campos vinculados a dados
- Atribua uma Tag (e, opcionalmente, um grupo ) à sua ToastNotification
- Defina os valores iniciais de dados para o seu ToastNotification
- Enviar a notificação
- Utilize o Tag e o Grupo para atualizar os valores de Dados com novos valores.
O snippet de código a seguir mostra as etapas 1 a 4. O próximo snippet mostrará como atualizar os valores de dados do toast .
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 quiser alterar seus valores Data, use o método Update para fornecer os novos dados sem construir novamente todo o conteúdo 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);
}
Usar o método atualizar em vez de substituir todo o toast também garante que a notificação toast permaneça na mesma posição na Central de Ações e não se mova para cima ou para baixo. Seria bastante confuso para o usuário se a notificação continuasse saltando para o topo da Central de Ações a cada poucos segundos enquanto a barra de progresso se preenchia!
O método Update retorna uma enumeração NotificationUpdateResult, que permite que você saiba se a atualização foi bem-sucedida ou se a notificação não pôde ser encontrada (o que significa que o usuário provavelmente rejeitou sua notificação e você deve parar de enviar atualizações para ela). Não é recomendável exibir outra notificação até que a sua operação de progresso seja concluída (como quando o download for concluído).
Elementos que dão suporte à associação de dados
Os elementos a seguir nas notificações tipo 'toast' oferecem apoio à associação de dados.
- Todas as propriedades no AdaptiveProgress
- A propriedade Text nos elementos AdaptiveText de nível superior
Atualizar ou substituir uma notificação
Desde o Windows 10, você sempre pode substituir uma notificação enviando um novo sistema pelo mesmo de Marca e Group. Então, qual é a diferença entre substituir o brinde e atualizar os dados do brinde?
| Replacing | Updating | |
|---|---|---|
| Posição na Central de Ações | Move a notificação para a parte superior da Central de Ações. | Deixa a notificação em vigor na Central de Ações. |
| Modifying content | Pode alterar completamente todo o conteúdo/layout do toast | Só é possível alterar propriedades que dão suporte à associação de dados (barra de progresso e texto de nível superior) |
| reaparecendo como pop-up | Pode reaparecer como um pop-up do sistema se você deixar SuppressPopup configurado como false (ou configurado como verdadeiro para enviar silenciosamente para a Central de Ações) |
Não reaparecerá como um pop-up; os dados do sistema são atualizados silenciosamente na Central de Ações |
| User dismissed | Independentemente de o usuário ter ignorado sua notificação anterior, sua notificação de substituição sempre será exibida. | Se o usuário ignorar a notificação, a atualização da notificação falhará. |
Em geral, atualização é útil para...
- Informações que frequentemente são alteradas em um curto período de tempo e não exigem ser trazidas para a frente da atenção do usuário
- Alterações sutis no conteúdo do toast, como alterar 50% para 65%
Muitas vezes, após a sequência de atualizações ter sido concluída (como o arquivo ter sido baixado), recomendamos realizar uma substituição na etapa final, pois...
- Sua notificação final provavelmente tem alterações drásticas de layout, como remoção da barra de progresso, adição de novos botões etc.
- O usuário pode ter descartado a notificação de progresso pendente, pois não se preocupa em acompanhar o download, mas ainda deseja ser notificado com uma notificação pop-up quando a operação for concluída.
Related topics
- exemplo de código completo no GitHub
- documentação do conteúdo do Toast
Windows developer