Continuiamo la serie sulle notifiche toast per parlare di un paio di interazioni aggiuntive che è possibile sperimentare.
Il primo punto riguarda la gestione dei download: sono spesso lunghi (soprattutto con connessioni lente o con file di grandi dimensioni), ci possono essere contenuti multipli (più canzoni di un album), il download può interrompersi o riprendere in base al network e, soprattutto, non è detto che l'utente tenga sempre l'applicazione aperta per vedere lo stato e il progresso del download.
A partire da Windows 10 Creators Update, le notifiche vengono in aiuto anche in questo caso, in cui è possibile mostrare lo stato di avanzamento direttamente nel centro notifiche:
ToastContent toastContent = new ToastContent() { Visual = new ToastVisual() { BindingGeneric = new ToastBindingGeneric() { Children = { new AdaptiveText() { Text = "Download contenuto in corso..." }, new AdaptiveProgressBar() { Value = new BindableProgressBarValue("progressValue"), ValueStringOverride = new BindableString("progressValueString"), Title = "Titolo contenuto", Status = new BindableString("progressStatus") } } } } }; var toast = new ToastNotification(toastContent.GetXml()); toast.Tag = "progress"; ToastNotificationManager.CreateToastNotifier().Show(toast);
Come si può notare dallo script, non c'è molta differenza rispetto ai template visti in precedenza. Cambiano solamente due cose: la prima è che è stato aggiunto al template un controllo AdaptiveProgressBar che permette la visualizzazione della progress bar, del titolo, dello stato del download e dei contenuti che sono a tutti gli effetti in "binding", mentre la seconda differenza riguarda l'assegnazione di un tag per identificare la notifica.
Come abbiamo detto, i contenuti sono in binding, proprio perché ha senso che vengano aggiornati nel momento del bisogno, quindi è sufficiente aggiornare la notifica recuperandola dal tag e cambiando i suoi metadati:
private void Update() { var data = new NotificationData(); data.Values["progressValue"] = "0.5"; data.Values["progressValueString"] = "50%"; data.Values["progressStatus"] = "Running..."; ToastNotificationManager.CreateToastNotifier().Update(data, "progress"); }
Maggiori informazioni sono disponibili su
http://aspit.co/bis
Per il secondo aspetto, invece, analizziamo un altro controllo che permette di interagire con l'applicazione, ovvero la TextBox. Lo scenario tipico è quello del "quick reply" quando arriva un messaggio, in cui c'è la notifica ma non c'è bisogno di aprire l'applicazione per rispondere e inviare, il tutto può essere gestito dal centro notifiche e da un background task.
Per integrarla in una notifica, è sufficiente aggiungere un input, come abbiamo già visto in precedenza, di tipo ToastTextBox:
ToastContent toastContent = new ToastContent() { Visual = new ToastVisual() { ... }, Actions = new ToastActionsCustom() { Inputs = { new ToastTextBox("textBox") { PlaceholderContent = "reply" } }, Buttons = { new ToastButton("Send", "action=reply") { ActivationType = ToastActivationType.Background, TextBoxId = "textbox" } } }, };
In questo caso, il controllo è demandato ad un background task che, leggerà il contenuto della casella di testo tramite l'attributo "textbox", e quindi seguirà tutto il flusso necessario all'invio del messaggio.
Il risultato finale di una notifica che include entrambi gli scenari, è simile al seguente:
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestire errori funzionali tramite exception in ASP.NET Core Web API
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
Evitare la command injection in un workflow di GitHub
Evitare la script injection nelle GitHub Actions
Eseguire operazioni sui blob con Azure Storage Actions
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Utilizzare la libreria Benchmark.NET per misurare le performance
Utilizzare i primary constructor di C# per inizializzare le proprietà
Implementare l'infinite scroll con QuickGrid in Blazor Server
Disabilitare automaticamente un workflow di GitHub (parte 2)
Usare le collection expression per inizializzare una lista di oggetti in C#