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
Usare il colore CSS per migliorare lo stile della pagina
Migliorare la scalabilità delle Azure Function con il Flex Consumption
Estrarre dati randomici da una lista di oggetti in C#
Utilizzare la funzione EF.Parameter per forzare la parametrizzazione di una costante con Entity Framework
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Utilizzare il nuovo modello GPT-4o con Azure OpenAI
Creare un webhook in Azure DevOps
Generare velocemente pagine CRUD in Blazor con QuickGrid
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Creare una custom property in GitHub
Ottenere un token di accesso per una GitHub App
Triggerare una pipeline su un altro repository di Azure DevOps