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
Utilizzare Azure Cosmos DB con i vettori
.NET Conference Italia 2024
Utilizzare Locust con Azure Load Testing
Filtrare i dati di una QuickGrid in Blazor con una drop down list
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Gestire gli accessi con Token su Azure Container Registry
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
Utilizzare Copilot con Azure Cosmos DB
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Supportare lo HierarchyID di Sql Server in Entity Framework 8
Utilizzare Azure AI Studio per testare i modelli AI
Introduzione alle Container Queries
I più letti di oggi
- .NET Conference Italia 2024 - Milano
- Develop and distribute Azure Functions using K8s and CI/CD
- Disponibile la versione finale di Hyper-V: la virtualizzazione per Windows Server 2008
- Speciale Mastering Entity Framework
- Velocity arriva alla CTP3
- Silverlight Summer: un'estate speciale piena di Style per i controlli Silverlight!
- Disponibile la versione beta di Silverlight 4.0
- Mono 0.13: ora anche web services
- .NET Alerts Software Development Kit