146 votes

Quel est si spécial à propos de Génériques.xaml?

J'ai été à essayer de comprendre comment organiser mon ResourceDictionary fichiers pour la réutilisation et le partage avec les autres membres de mon équipe.

Je garder à venir à travers les "Générique.xaml", mais si je regarde sur MSDN pour les Génériques.xaml ou tout simplement faire une recherche sur Google, je ne semble pas pour obtenir des billets de blog et forum questions qui se produisent de le mentionner, je ne peux pas semble frapper sur quelque chose de vraiment autoritaire et clair.

Quelle est la différence entre les Génériques.xaml et MyRandomlyNamedResourceDictionary.xaml? Il semble que de toute façon, j'ai pour référence ResourceDictionaries stockés dans des bibliothèques de l'attribut Source. E. g.,:

<Application.Resources>
    <ResourceDictionary
        Source="/CommonLibraryWpfThemes;component/Themes/Generic.xaml"
</Application.Resources>

Alors, quels sont les avantages d'Générique.xaml fournir exactement? A-t-elle une fin si je ne suis pas en train de donner à mon application, les différents "looks" (c'est à dire, si j'ai un seul thème)?

Merci!

145voto

Phil Devaney Points 8595

Tous les contrôles WPF a un Style par défaut qui prévoit, entre autres choses, le Contrôle par défaut de ControlTemplate. WPF semble pour le style par défaut dans un dictionnaire de ressources dans le dossier Thèmes, dans la même assemblée que le contrôle. La clé pour le style par défaut est fourni par le Contrôle.DefaultStyleKey propriété de dépendance, la valeur par défaut de ce qui est surchargé dans chaque sous-classe de Contrôle.

Le nom de la ressource dictionnaire dépend du thème Windows par exemple sur Vista en utilisant le thème Aero, le dictionnaire est appelée Aero.NormalColor.xaml, sur XP en utilisant le thème par défaut c'est Luna.NormalColor.xaml. Si le style n'est pas trouvé dans le thème de dictionnaire, il ressemble au Générique.xaml je.e pour les contrôles dont le regard ne dépend pas de ce thème.

Cela s'applique uniquement à des contrôles personnalisés que vous avez définis comme des classes dérivées de Contrôle, directement ou indirectement. Vous pouvez changer le style par défaut d'un contrôle standard en dérivant et en appelant DefaultStyleKeyProperty.OverrideMetadata dans le constructeur statique, mais vous devez ensuite fournir le plein de style, y compris ControlTemplate.

Notez que vous pouvez dire WPF à regarder dans un assembly externe pour votre style par défaut à l'aide de la ThemeInfo attribut. L'assembly externe doit être nommé de la <YourAssembly>.<Nomdutheme>.dll par exemple PresententationFramework.Aero.dll.

99voto

Kenan E. K. Points 8497

Pour un generic.xaml le fichier (insensible à la casse) devant être quelque chose de spécial, deux conditions doivent être remplies:

  • Il doit être dans les Thèmes sous-dossier racine du projet
  • L'assemblée doit être marqué avec l' ThemeInfoAttribute (généralement en AssemblyInfo.cs)

Puis il sert de valeur par défaut de recherche de l'emplacement de tout les styles par défaut que vous souhaitez appliquer à vos Commandes. Notez également que pour un style par défaut, elle doit déclarer ses deux TargetType et x:Clé comme le Type de Contrôle qui est à être coiffés.

Si vous souhaitez ajouter un ensemble de thèmes et de thème commutation à votre demande, qui est accompli avec peu de codage, cette technique se limite à définir la valeur par défaut dictionnaire de ressources.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X