2010-10-21 4 views
1

J'ai une bibliothèque de contrôles personnalisés (MyCustomControls.dll) qui est un plugin pour une application tierce. Il est affiché en tant que bibliothèque de classes et est appelé par l'application tierce lors de l'exécution. Mon problème concerne les styles personnalisés que j'ai définis pour divers contrôles utilisateur tels que listviewitem, textblock ne peut désormais pas être chargé au niveau de l'application.Chargement de styles personnalisés dans une bibliothèque de contrôles personnalisés WPF

Comment puis-je ajouter mes styles personnalisés à la hiérarchie de recherche de ressources de sorte que tous les contrôles de la bibliothèque utilisent mes styles personnalisés? Par exemple, si je définis le style ci-dessous, tous les contrôles dans MyCustomControls.dll ne le verront pas lorsqu'ils seront créés. Mais si j'ajoute MyCustomControls.dll à une application et que je la charge dans les ressources de l'application, le style est appliqué.

Note: L'application 3ème partie n'est pas une application WPF. Application.Current renvoie null lors de l'exécution.

Répondre

1

Si vous n'avez pas accès à l'application tierce, et s'il ne s'agit pas d'une application WPF (Silverlight?), Vous ne pouvez pas injecter vos styles écrits en xaml pour WPF. En outre, seule l'application tierce saura comment appliquer les habillages plus tard. Je suppose que si ce n'est pas votre application, la seule chose que vous pouvez faire est de suivre les "instructions du fabricant". Référence: Si vous possédez les deux côtés - l'application principale et les ressources à brancher, vous pouvez utiliser MergeDictionaries pour fusionner les ressources dll po. Syntaxe URI. Quelque chose comme ceci:

En App.xaml:

<ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="pack://application:,,,/YOUR_DLL;component/SUBFOLDER/YOURCUSTOMSTYLES.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 

Dans ces scénarios, il est important de garder la clé de vos ressources identiques à celles de l'application principale attend. En effet, le mécanisme d'habillage typique consiste à utiliser DynamicResource lors de la consommation des ressources et, par conséquent, ils sont recherchés par la "clé" chaque fois qu'ils sont utilisés. Si vous remplacez une ressource existante par une autre en utilisant la même clé, par exemple, basculez une ressource appelée "ButtonBackground" sur Jaune, et l'application utilise cette ressource DYNAMIQUEMENT dans l'application comme arrière-plan des boutons, tous les boutons deviendront jaunes .

+0

Merci pour votre réponse. L'application tierce n'est pas une application WPF et je n'ai aucun contrôle sur celle-ci. Question éditée pour refléter ceci. – user173884

+0

J'ai mis à jour ma réponse. Malheureusement, il n'y a rien que vous pouvez faire pour savoir comment injecter des ressources dans une application tierce, en particulier une application non-WPF et non-Silverlight ... –

Questions connexes