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
Managed deployment strategy in Azure DevOps
Generare un hash con SHA-3 in .NET
Cancellare una run di un workflow di GitHub
Gestire i dati con Azure Cosmos DB Data Explorer
Utilizzare il nuovo modello GPT-4o con Azure OpenAI
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Creare agenti facilmente con Azure AI Agent Service
Creare una libreria CSS universale - Rotazione degli elementi
Selettore CSS :has() e i suoi casi d'uso avanzati
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Configurare lo startup di applicazioni server e client con .NET Aspire
Definire stili a livello di libreria in Angular