Ho una pagina in un'app di Windows Phone 8.1 in cui ho alcuni componenti che dovrebbero essere in grado di avere tre diversi stati di colore. Dovrebbero essere rossi, blu o il colore di primo piano del tema corrente.Quando controllare a livello di programmazione le modifiche ai temi in Windows Phone 8.1
Pertanto, se la mia app viene avviata utilizzando il tema Dark sul telefono, quindi l'utente esce dall'app e cambia il tema Light e accede di nuovo alla mia app, ho bisogno di cambiare immediatamente i componenti che avevano il colore di primo piano del vecchio tema.
Poiché i componenti devono cambiare tra diversi colori (in cui il colore di primo piano del tema è solo uno di essi) non è possibile impostare il Primo piano su PhoneForegroundColor
in XAML
.
Quello che ho fatto è quello di aggiungere un listener Resuming
evento che fa questo:
myTextBlock.Foreground = new SolidColorBrush((Color)Application.Current.Resources["PhoneForegroundColor"]);
Ma ... l'evento Resuming
viene generato prima le risorse del Application.Current sono aggiornati, così finisco con lo stesso colore di prima. Se l'utente esce nuovamente e di nuovo, funzionerà dal momento che il Application.Current.Resources["PhoneForegroundColor"]
è stato aggiornato ad un certo punto dopo l'evento Resuming
la volta precedente.
Domanda: Quando posso leggere prima la versione aggiornata Application.Current.Resources["PhoneForegroundColor"]
, dal momento che Resuming
non sembra essere il posto giusto?
Domanda: In alternativa, c'è un modo per myTextBlock
ereditare ForegroundColor (CSS-ish) di un altro componente, in modo che possa cambiare la myTextBlock.Foreground
programatically tra rosso/blu/Eredita senza dover mente modifiche al telefono Theme nel ciclo di vita della mia app?
Qualsiasi suggerimento apprezzato!
Grazie mille! Ho anche ottenuto il primo a lavorare così vado con quella soluzione :) Per la soluzione alternativa, però, avrei bisogno di impostare il Primo piano su "{Binding TextColor, Source = {StaticResource ColorBindingProvider}}" giusto? Dal momento che potrei averlo sovrascritto con Red o Blue, quindi tutto ciò che era nello XAML non è più attivo ... – andrrs
No, puoi semplicemente mettere le impostazioni del colore nel metodo "App_Resuming" del provider. È una proprietà di dipendenza, quindi notificherà tutte le associazioni durante l'aggiornamento. Ovviamente devi attivarlo in qualche modo, se cambi le impostazioni del colore in fase di esecuzione. Utilizzare la messaggistica o semplicemente ottenere il provider tramite App.Current.Resources [...] e impostare la proprietà. –
Btw: invece di usare una proprietà di dipendenza, si potrebbe anche semplicemente avere BindingProvider implementare INotifyPropertyChanged ... –