Udostępnij przez


Toast - wyskakujący pasek postępu i powiązanie danych

Użycie paska postępu wewnątrz wyskakującego powiadomienia umożliwia poinformowanie użytkownika o stanie długotrwałych operacji, takich jak pobieranie, renderowanie wideo, cele ćwiczeń i nie tylko.

Important

wymaga aktualizacji dla twórców i biblioteki powiadomień w wersji 1.4.0: musisz kierować zestaw SDK 15063 i uruchamiać kompilację 15063 lub nowszą, aby używać pasków postępu na wyskakowanych paskach. Musisz użyć wersji 1.4.0 lub nowszej biblioteki NuGet zestawów narzędzi platformy UWP Community Toolkit, aby utworzyć pasek postępu w zawartości wyskakowania.

Pasek postępu wewnątrz wyskakujących może być "nieokreślony" (brak określonej wartości, animowane kropki wskazują, że operacja występuje) lub "determinate" (określony procent paska jest wypełniony, na przykład 60%).

ważne interfejsy API: klasa NotificationData, metoda ToastNotifier.Update, klasa ToastNotification

Note

Tylko wersja Desktop obsługuje paski postępu w powiadomieniach typu toast. Na innych urządzeniach pasek postępu zostanie porzucony z powiadomienia.

Na poniższym obrazie przedstawiono pasek postępu determinate ze wszystkimi odpowiednimi właściwościami oznaczonymi etykietami.

Toast z właściwościami paska postępu oznaczony etykietą
Property Typ Required Description
Title Ciąg lub BindableString false Pobiera lub ustawia opcjonalny ciąg tytułu. Obsługuje powiązanie danych.
Value double lub AdaptiveProgressBarValue lub BindableProgressBarValue false Pobiera lub ustawia wartość paska postępu. Obsługuje powiązanie danych. Wartość domyślna to 0. Może być podwójne z zakresu od 0.0 do 1.0, AdaptiveProgressBarValue.Indeterminatelub new BindableProgressBarValue("myProgressValue").
ValueStringOverride Ciąg lub BindableString false Pobiera lub ustawia opcjonalny ciąg, który ma być wyświetlany zamiast domyślnego ciągu procentowego. Jeśli to nie zostanie podane, zostanie wyświetlony komunikat podobny do "70%".
Status Ciąg lub BindableString true Pobiera lub ustawia ciąg stanu (wymagany), który jest wyświetlany pod paskiem postępu po lewej stronie. Ten ciąg powinien odzwierciedlać stan operacji, na przykład "Pobieranie..." lub "Instalowanie..."

Poniżej przedstawiono sposób generowania powiadomienia widocznego powyżej...

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

Należy jednak dynamicznie aktualizować wartości paska postępu, aby rzeczywiście była "aktywna". Można to zrobić za pomocą powiązania danych, aby zaktualizować powiadomienie toast.

Używanie powiązania danych w celu zaktualizowania komunikatu

Korzystanie z powiązania danych obejmuje następujące kroki...

  1. Tworzenie zawartości powiadomienia z wykorzystaniem pól powiązanych z danymi
  2. Przypisz tagu (i opcjonalniegrupy ) do ToastNotification
  3. Zdefiniuj wartości początkowe Data w ToastNotification
  4. Wyślij powiadomienie
  5. Wykorzystaj Tag i Group do aktualizacji wartości Data nowymi wartościami

Poniższy fragment kodu przedstawia kroki od 1 do 4. W następnym fragmencie kodu pokazano, jak zaktualizować wyskakujące wartości Data.

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);
}

Następnie, gdy chcesz zmienić wartości Data, użyj metody Update, aby podać nowe dane bez konieczności ponownego konstruowania całego ładunku komunikatu 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);
}

Użycie metody Update zamiast zastępowania całego powiadomienia typu toast gwarantuje również, że powiadomienie toast pozostaje na swoim miejscu w Centrum akcji i nie przesuwa się ani w górę, ani w dół. To byłoby dość mylące dla użytkownika, gdyby wyskakujące okienko ciągle skakało na górę Centrum akcji co kilka sekund, podczas gdy pasek postępu się wypełnia.

Metoda Update zwraca wyliczenie NotificationUpdateResult, które informuje o tym, czy aktualizacja zakończyła się pomyślnie, czy nie można odnaleźć powiadomienia (co oznacza, że użytkownik prawdopodobnie odrzucił powiadomienie i należy zatrzymać wysyłanie aktualizacji do niego). Nie zalecamy wyświetlania kolejnego powiadomienia do momentu zakończenia operacji postępu (na przykład po zakończeniu pobierania).

Elementy obsługujące powiązanie danych

Następujące elementy w powiadomieniach wyskakujące obsługują powiązanie danych

  • Wszystkie właściwości AdaptiveProgress
  • Właściwość Text na elementach AdaptiveText najwyższego poziomu

Aktualizowanie lub zastępowanie powiadomienia

Od systemu Windows 10 zawsze można zastąpić powiadomienie, wysyłając nowy wyskakujące wyskakujące powiadomienie o tym samym tagu i grupie . Więc jaka jest różnica między zastąpieniem komunikatu a aktualizacją danych komunikatu?

Replacing Updating
pozycja w Centrum Akcji Przenosi powiadomienie na górę Centrum akcji. Pozostawia powiadomienie w obrębie Centrum akcji.
Modifying content Może całkowicie zmienić zawartość i układ komunikatu typu toast. Może zmieniać tylko właściwości, które obsługują powiązanie danych (pasek postępu i tekst najwyższego poziomu)
ponownie wyświetlane jako okienko popup Może pojawić się ponownie jako wyskakujące okienko, jeśli pozostawisz SuppressPopup ustawioną na false (lub ustawisz na prawda, aby dyskretnie wysłać do Centrum akcji) Nie pojawi się ponownie jako okienko; dane powiadomienia są po cichu aktualizowane w Centrum akcji
User dismissed Niezależnie od tego, czy użytkownik odrzucił poprzednie powiadomienie, zamienny komunikat toast zawsze będzie wysyłany. Jeśli użytkownik odrzucił powiadomienie, aktualizacja powiadomienia zakończy się niepowodzeniem.

Ogólnie rzecz biorąc, aktualizacja jest przydatna w przypadku...

  • Informacje, które często zmieniają się w krótkim czasie i nie wymagają zwracania uwagi użytkownika
  • Subtelne zmiany zawartości komunikatów toast, takie jak zmiana wartości 50% na 65%

Często po zakończeniu całego procesu aktualizacji (na przykład gdy plik został pobrany), zalecamy dokonanie zastąpienia w ostatnim kroku, ponieważ...

  • Ostateczne powiadomienie prawdopodobnie ma drastyczne zmiany układu, takie jak usunięcie paska postępu, dodanie nowych przycisków itp.
  • Użytkownik mógł odrzucić oczekujące powiadomienie o postępie, ponieważ nie zależy mu na oglądaniu pobierania, ale nadal chce być powiadomiony za pomocą powiadomienia typu toast po zakończeniu operacji.