Quelle est la particularité de Generic.xaml?

J’ai essayé de trouver comment organiser mes fichiers ResourceDictionary pour les réutiliser et les partager avec les autres membres de mon équipe.

Je n’arrête pas de trouver “Generic.xaml”, mais si je regarde MSDN pour Generic.xaml ou que je fais juste une recherche sur Google, je ne reçois que des articles de blog et des questions de forum qui en parlent – je n’arrive pas à le faire bash sur quelque chose de vraiment autoritaire et clair.

Quelle est la différence entre Generic.xaml et MyRandomlyNamedResourceDictionary.xaml? Il semble que de toute façon, je dois faire référence à ResourceDictionaries stocké dans des bibliothèques avec l’atsortingbut Source. Par exemple,:

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

Alors, quel avantage apporte Generic.xaml? At-il un but si je n’essaie pas de donner à mon application plusieurs “looks” (c’est-à-dire si je n’ai qu’un seul thème)?

    Chaque contrôle dans WPF a un style par défaut qui fournit, entre autres, le ControlTemplate par défaut du contrôle. WPF recherche le style par défaut dans un dictionnaire de ressources spécial dans le dossier Thèmes du même assembly que le contrôle. La clé du style par défaut est fournie par la propriété de dépendance Control.DefaultStyleKey , dont la valeur par défaut est remplacée dans chaque sous-classe de Control.

    Le nom du dictionnaire de ressources dépend du thème Windows actuel, par exemple sous Vista avec le thème Aero. Le dictionnaire s’appelle Aero.NormalColor.xaml. Sous XP, le thème par défaut est Luna.NormalColor.xaml. Si le style n’est pas trouvé dans le dictionnaire de thèmes, il recherche dans Generic.xaml, c.-à-d. Les contrôles dont l’apparence ne dépend pas du thème.

    Cela s’applique uniquement aux contrôles personnalisés que vous avez définis, c’est-à-dire les classes dérivées de Control, directement ou indirectement. Vous pouvez modifier le style par défaut pour un contrôle standard en en dérivant et en appelant DefaultStyleKeyProperty.OverrideMetadata dans le constructeur statique, mais vous devez ensuite fournir le style complet, y compris ControlTemplate.

    Notez que vous pouvez indiquer à WPF de rechercher un style par défaut dans un assembly externe à l’aide de l’atsortingbut ThemeInfo. L’assembly externe doit être nommé < YourAssembly > . < ThemeName > .dll, par exemple PresententationFramework.Aero.dll.

    Pour qu’un fichier generic.xaml (insensible à la casse) soit spécial, deux conditions doivent être remplies:

    • Il doit se trouver dans le sous-dossier racine du thème du projet.
    • L’assembly doit être marqué avec le ThemeInfoAtsortingbute (généralement dans AssemblyInfo.cs )

    Il sert ensuite d’emplacement de recherche par défaut pour tous les styles par défaut que vous souhaitez appliquer à vos contrôles. Notez également que pour qu’un style soit la valeur par défaut, il doit déclarer à la fois TargetType et x: Key comme type de contrôle à styler.

    Si vous souhaitez append des thèmes et des thèmes complets à votre application, ce qui se fait avec un codage, cette technique définit simplement le dictionnaire de ressources par défaut.