2010-06-10 5 views
2

Dans WPF, j'ai quelques dictionnaires de ressources et dans les styles pour mes panneaux et contrôles dans mon application. Je réutilise les mêmes couleurs encore et encore. J'ai effectivement 5 couleurs et ils donnent à mon application un bon schéma de couleurs. Cependant, si je ne veux pas changer le thème, je dois aller dans les RD et changer chaque couleur là-bas.Comment avoir une couleur de thème dynamique dans WPF

Je voudrais quelque part avoir les couleurs définies mais je ne sais pas comment et où. J'ai essayé de mettre un tag de couleur dans un RD mais dès que je l'ai référencé dans le même RD Visual Studio s'est écrasé.

Aussi la meilleure solution serait que je puisse avoir la couleur comme un paramètre dynamique dans l'application elle-même afin que les utilisateurs puissent même le changer eux-mêmes.

Répondre

4

Le code suivant fonctionne dans Silverlight, devrait donc travailler dans WPF (peut-être avec quelques modifications - je ne l'ai pas eu le temps de vérifier qu'il):

Dans vos ressources définissent vos couleurs:

<SolidColorBrush x:Key="MyNamedColor" Color="DarkRed"/> 

ensuite définir des styles:

<Style x:Key="MyTextBlockStyle" TargetType="TextBlock"> 
    <Setter Property="Foreground" Value="{StaticResource MyNamedColor}"/> 
</Style> 
<Style x:Key="MyLineStyle" TargetType="Line"> 
    <Setter Property="Stroke" Value="{StaticResource MyNamedColor}"/> 
</Style> 

Puis dans votre code (soit dans le XAML ou dans le code derrière) utilisent ces styles sur tous vos TextBlocks, lignes, etc.

Ensuite, lorsque vous souhaitez changer les couleurs, il suffit de mettre à jour la définition originale SolidColorBrush.

+0

Typo: Doit être StaticResource. –

+0

@Daniel - Bravo, j'étais en train de retaper plutôt que de coller. – ChrisF

+0

Eh bien c'est ce que j'ai essayé et fait planter Visual Studio. Je suppose qu'il est temps pour une mise à jour. EDIT: En fait, je viens de faire LightBlue La question est donc puis-je utiliser la SolidBrush dans tous les biens qui ont une couleur. –

0

En plus de la solution de ChrisF: Si vous voulez qu'elle soit dynamique au moment de l'exécution, vous pouvez utiliser DynamicResource et modifier la ressource elle-même au moment de l'exécution.

+0

Puis-je modifier la ressource même si elle figure dans un dictionnaire de ressources? –

+0

Jetez un oeil à http://blogs.microsoft.co.il/blogs/davids/archive/2009/05/19/staticresource-and-dynamicresource.aspx –

Questions connexes