I designer, generalmente, hanno l'arduo compito di dover realizzare un'interfaccia grafica ed una user experience che si adatti al contesto, come ad esempio Windows che supporta migliaia di risoluzioni e DPI differenti, ma anche al gusto dell'utente, per dare quel tocco di personalizzazione in più che non fa mai male.
Una delle cose più semplici da realizzare per personalizzare l'interfaccia grafica, è quella di sfruttare l'accent color (ovvero il colore predominante, usato anche per il menù start, TitleView delle varie applicazioni etc.) come colore di sfondo, come sottolineatura di parti importanti (come ad esempio la sezione di una NavigationView), come colore per i bordi dei pulsanti. Purtroppo, nonostante ci sia a disposizione la ThemeResource SystemAccentColor, non è detto che questa sia bindabile o utilizzabile ovunque, come ad esempio all'interno di una libreria di controlli.
Per fortuna, il namespace Windows.UI.ViewManagement contiene la classe UISettings, che ci espone diverse proprietà, metodi ed eventi per recuperare tutto il necessario, come dimostrato nell'esempio seguente:
public MainPage() { this.InitializeComponent(); var uiSettings = new UISettings(); uiSettings.ColorValuesChanged += OnColorChanged; } private void OnColorChanged(UISettings sender, object args) { var accentColor = sender.GetColorValue(UIColorType.Accent); Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => MyBackgroundGrid.Background = new SolidColorBrush(accentColor)); }
Come si può notare dall'esempio, infatti, ci siamo andati a registrare all'evento di ColorValuesChanged che viene invocato ogni qualvolta dalle impostazioni di Windows viene cambiato l'accent color o altre tipologie di colori, esposte dall'enum UIColorType. Quindi, una volta recuperato il colore tramite il metodo GetColorValue, lo siamo andati ad impostare come Background sulla Grid da renderizzare a schermo. Da notare che l'operazione è stata eseguita sfruttando il dispatcher di WinRT, necessario affinché non ci siano problemi di marshalling dovuti al fatto che l'evento viene scatenato in un thread differente da quello della UI sulla quale andremo ad eseguire l'operazione di update del colore di sfondo.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Le novità di Angular: i miglioramenti alla CLI
Utilizzare i primary constructor in C#
Evitare la command injection in un workflow di GitHub
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Utilizzare domini personalizzati gestiti automaticamente con Azure Container Apps
Definire stili a livello di libreria in Angular
Reactive form tipizzati con modellazione del FormBuilder in Angular
Limitare le richieste lato server con l'interactive routing di Blazor 8
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Verificare la provenienza di un commit tramite le GitHub Actions
Filtrare e rimuovere gli elementi dalla cache del browser tramite le API JavaScript
Sfruttare lo streaming di una chiamata Http da Blazor