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
Eseguire query verso tipi non mappati in Entity Framework Core
Recuperare l'ultima versione di una release di GitHub
Aprire una finestra di dialogo per selezionare una directory in WPF e .NET 8
Le novità di Angular: i miglioramenti alla CLI
Ottenere un token di accesso per una GitHub App
Ottimizzazione dei block template in Angular 17
Generare la software bill of material (SBOM) in GitHub
Utilizzare Tailwind CSS all'interno di React: installazione
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Triggerare una pipeline su un altro repository di Azure DevOps