2009-02-12 7 views
6

Si je crée un contrôle personnalisé avec WPF, comment puis-je fournir des styles pour le contrôle correspondant au thème actuellement appliqué (Aero, Luna, Classic, etc.)?Comment puis-je faire correspondre les styles de mes contrôles au thème actuel? (WPF)

Par exemple, je voudrais appliquer ce qui suit lors de l'utilisation Aero:

<Style> 
    <Setter Property="Background" Value="White"/> 
</Style> 

Mais puis appliquez un style différent lorsque vous utilisez Luna:

<Style> 
    <Setter Property="Background" Value="#DFDFDF"/> 
</Style> 

Puis-je prolonger en quelque sorte les thèmes de base à fournir un soutien pour mon nouveau contrôle?

Répondre

7

Quelques liens qui pourraient être se révéler utile:

http://arbel.net/blog/archive/2006/11/03/Forcing-WPF-to-use-a-specific-Windows-theme.aspx

http://www.browsoft.com/tutorials/DefaultTheme.html

http://blogs.msdn.com/wpfsdk/archive/2007/07/31/using-themes-with-custom-controls.aspx

Fondamentalement, vous créer des dictionnaires de ressources pour vos contrôles personnalisés nommés comme ceci:

Classic.xaml (“Classic” Windows 9x/2000 look on Windows XP.) 
Luna.NormalColor.xaml (Default blue theme on Windows XP.) 
Luna.Homestead.xaml (Olive theme on Windows XP.) 
Luna.Metallic.xaml (Silver theme on Windows XP.) 
Royale.NormalColor.xaml (Default theme on the Windows XP Media Center Edition operating system.) 
Aero.NormalColor.xaml (Default theme on the Windows Vista operating system.) 

Mettez les différents styles pour vos contrôles dans ces fichiers et ils seront chargés en fonction du thème actuel du système d'exploitation.

+0

Ces liens sont utiles, merci. Le point clé pour moi était une modification dans AssemblyInfo.cs - basculer l'attribut themeDictionaryLocation [ThemeInfo] de 'None' à 'SourceAssembly'. – ajlane

0

Vous pouvez utiliser différents thèmes dans WPF en chargeant/déchargeant des dictionnaires de ressources. Ces dictionnaires doivent contenir les styles pour vos contrôles. Lorsque vous échangez des dictionnaires, WPF applique les styles à vos contrôles. Par exemple, si c'était WhiteStyle.xaml et que vous l'aviez chargé, vos blocs de texte afficheraient tous du texte dans une police de couleur blanche.

<Style TargetType="TextBlock"> 
    <Setter Property="Foreground" Value="White"/> 
</Style> 

si vous permuté dehors pour BlackStyle.xaml qui contient

<Style TargetType="TextBlock"> 
    <Setter Property="Foreground" Value="Black"/> 
</Style> 

votre TextBlocks afficheraient texte dans une police de couleur noire. WPF gère beaucoup de détails pour nous, nous devons juste lui dire quels sont les détails.

L'échange de dictionnaires de ressources est très simple et je vous laisse le soin de le découvrir. Googling "WPF Themes" est un bon point de départ.

Questions connexes