2010-10-15 3 views
1

Je fais une application pour Windows Phone 7 (en utilisant Visual Studio 2010 Express pour Windows Phone RTM), et j'ai quelques problèmes concernant la conscience du thème (lumière/obscurité) en particulier avec les couleurs.WP7] Couleur dynamique pour la reconnaissance de thème OU Comment définir une valeur dynamique pour une propriété dans une ressource personnalisée dans App.xaml?

Fondamentalement, je veux faire la même chose que le téléphone en interne lorsque vous utilisez les couleurs/brosses staticresource. Par exemple, si je déclare:

<Border Background="{StaticResource PhoneBackgroundBrush}" /> 

La frontière aura un fond noir avec le thème foncé et blanc avec une lumière. Donc, je veux avoir une ressource ... disons MyBackgroundBrush, et sera utilisé comme:

<Border Background="{StaticResource MyBackgroundBrush}" /> 

Et, il aura, peut-être bleu pour le thème noir et rouge pour la lumière. Donc, ma question est: comment puis-je définir une telle ressource et un tel comportement?

Répondre

1

Voir ceci question about theme detection. Cela vous obtenir un moyen de détecter le thème, puis utiliser ces informations pour définir votre pinceau de fond en le remplaçant dans les ressources de l'application:

App.Current.Resources.Remove("MyPhoneBrush"); 
App.Current.Resources.Add("MyPhoneBrush", value); 

Vous pouvez définir les deux brosses colorées avec un nom en XAML, puis définir l'un ou l'autre comme la valeur d'exécution de MyPhoneBrush. vous voudrez probablement définir l'un d'entre eux par défaut afin que les choses fonctionnent aussi au moment du design ...

+0

Merci pour votre réponse. Je pense que je comprends l'idée mais je suis incapable de la tester maintenant. Où dois-je déclarer votre code? Cela fonctionnera-t-il dans App.xaml.cs, comme ceci: this.Current.Resources.Add ("MyPhoneBrush", value) ;? –

+0

App.Current est statique, vous devriez donc être en mesure de mettre ce code à peu près n'importe où. Si vous vous basez sur l'un des modèles standard, vous pouvez le mettre dans MainPage_Loaded, où (en fonction du projet) il devrait déjà y avoir un code de référence App. –

+0

Merci, je l'ai juste fait fonctionner il y a un certain temps. Une chose à noter cependant, cela pourrait être dû à ma mise en œuvre rudimentaire, mais il importe où le code est déclaré. Par exemple, j'ai eu une définition de style texblock dans App.xaml. Puis j'ai déclaré votre code dans App.xaml.cs-> Application_Launching (s, e). Après cela, j'ai changé la propriété de premier plan dans mon style à la ressource statique, mais n'a pas fonctionné depuis (je suppose que) App.Xaml est analysé avant que la ressource soit ajoutée. Pourtant, je l'ai eu pour travailler en remplaçant Foreground directement dans le bloc de texte avec la staticresource. –

Questions connexes