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
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
Creare gruppi di client per Event Grid MQTT
Paginare i risultati con QuickGrid in Blazor
Usare lo spread operator con i collection initializer in C#
Sostituire la GitHub Action di login su private registry
Simulare Azure Cosmos DB in locale con Docker
Miglioramenti agli screen reader e al contrasto in Angular
Creare una libreria CSS universale: Clip-path
Eseguire i worklow di GitHub su runner potenziati
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
I più letti di oggi
- Build 2015: segui con noi tutte le novità per gli sviluppatori in diretta da San Francisco
- Speciale Windows Live Services: come integrarli nelle proprie applicazioni
- Rilasciata la RTM di SQL Server 2012, la versione Express subito in download
- Build 2014: tutte le novità per gli sviluppatori in diretta da San Francisco
- .NET Managed provider per MySQL
- WS-I approva Basic Profile 1.0
- Due regali dal Tech-Ed USA 2004: WSE 2.0 e VS 2005 Team System
- VS 2005 e SQL Server 2005 Express da scaricare
- Microsoft aggiorna WinFS beta 1 per VS 2005
- Utilizzare CLEditor per consentire l'input di HTML in ASP.NET MVC