L'integrazione con il sistema operativo è uno dei punti di forza delle Windows Store app, una di esse in particolare è proprio un requisito per la pubblicazione nello Store: si tratta dell'utilizzo del pannello dei Settings del sistema operativo per integrare impostazioni e informazioni sull'applicazione.

In WinRT abbiamo a disposizione la classe statica SettingsPane con cui possiamo gestire eventi e contenuti del pannello Settings del sistema operativo, che si apre dalla charm, con la gesture swipe e lo short-cut Windows+c.
L'oggetto è molto semplice: espone il metodo GetForCurrentView per recuperare l'oggetto SettingsPane associato all'applicazione, il metodo Show per mostrare programmaticamente il flyout e infine l'evento CommandsRequested che si scatena quando l'utente apre manualmente la barra dei Settings.
La logica di base è quella di intercettare l'evento di apertura ed aggiungere le nostre voci di menu a quelle predefinite dal sistema, come Permissions ecc..
Per aggiungere una voce possiamo usare l'oggetto SettingsCommand, che implementa l'interfaccia IUICommand, e può essere quindi aggiunto alla collezione IList
var s = SettingsPane.GetForCurrentView(); s.CommandsRequested += (SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args) => { var cmd = new SettingsCommand("commandId", "Impostazioni (etichetta)", (o) => { //popup }); args.Request.ApplicationCommands.Add(cmd); }; SettingsPane.Show();

L'oggetto SettingsCommand espone un delegato che viene richiamato alla pressione del relativo elemento del menu, è a seguito di questo evento che possiamo visualizzare la nostra interfaccia e mostrare all'utente le informazioni o la maschera di impostazioni.
In XAML non esistono controlli specifici per rispettare la UI e la user experience del sistema operativo: il tutto può essere fatto utilizzando opportunamente il controllo Popup impostando dimensioni, animazioni di transizione e creando un layout aderente a quello di Windows (compreso il pulsante di back).
Tim Heuer (http://timheuer.com), Program Manager Lead per la divisione XAML in Microsoft ha creato Callisto: una libreria che tra le altre cose, implementa un controllo SettingsFlyout che semplifica l'implementazione di tali layout. Ecco un esempio:
var s = SettingsPane.GetForCurrentView(); s.CommandsRequested += (SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args) => { var cmd = new SettingsCommand("commandId", "Impostazioni (etichetta)", (o) => { var f = new Callisto.Controls.SettingsFlyout(); //larghezza del flyout f.FlyoutWidth = SettingsFlyout.SettingsFlyoutWidth.Narrow; //f.FlyoutWidth = SettingsFlyout.SettingsFlyoutWidth.Wide; //testo dell'header f.HeaderText = o.Label; //colore di sfondo dell'header f.HeaderBrush = new SolidColorBrush(Colors.Orange); //logo di fianco all'header var img = new BitmapImage(new Uri("ms-appx:///Assets/SmallLogo.png")); f.SmallLogoImageSource = img; //colore del testo e dello sfondo f.ContentBackgroundBrush = new SolidColorBrush(Colors.Red); f.ContentForegroundBrush = new SolidColorBrush(Colors.White); //contenuto f.Content = new TextBlock() { Text = "Esempio" }; f.IsOpen = true; }); args.Request.ApplicationCommands.Add(cmd); }; SettingsPane.Show();

La reference di Callisto è gestibile attraverso NuGet o come estenzione di Visual Studio.
(http://visualstudiogallery.msdn.microsoft.com/0526563b-7a48-4b17-a087-a35cea701052)
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Configurare policy CORS in Azure Container Apps
Dependency Injection e custom validator in Blazor con .NET 7.0
Sfruttare i tag nell'output cache di ASP.NET Core 7
Linting di un Dockerfile con un workflow di GitHub
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
Utilizzare la session affinity con Azure Container Apps
Sfruttare la local cache del browser tramite gli ETag in ASP.NET Core
Utilizzo di Set e Array in JavaScript
Gestire gli errori di caricamento delle immagini
Utilizzare flat e flatMap per appiattire array innestati in array
Definire la durata dell'output cache in ASP.NET Core 7
Utilizzare gli snapshot con Azure File shares
I più letti di oggi
- Usare un KeyedService di default in ASP.NET Core 8
- .NET Conference Italia 2023 - Milano e Online
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Registrare servizi multipli tramite chiavi in ASP.NET Core 8
- Creare dei grafici con OWC
- Ottimizzare le prestazioni di ASP.NET Core con la Cache distribuita su SQL Server