J'ai des classes personnalisées que j'instancie actuellement dans App.xaml en tant que ressources. Je veux déplacer ces objets personnalisés dans un ResourceDictionary fusionné, où ils sont utilisés dans les styles, et les garder près de l'endroit où ils sont utilisés. Voici un exemple de ce que je veux, en utilisant arbitrairement des objets de conversion faux, mais ils pourraient être un objet personnalisé ...Silverlight 3 - Création d'objets personnalisés dans un ResourceDictionary fusionné
App.xaml (déclarations d'espace de noms omises):
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Merged.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style x:Key="SomeStyle" TargetType="SomeControl">
...
</Style>
...
</ResourceDictionary>
Et puis dans Merged.xaml (déclarations d'espace de noms omis):
<ResourceDictionary>
<cvt:VisibilityToBoolConverter x:Key="BoolToVisibility" Inverted="True"/>
<cvt:VisibilityToBoolConverter x:Key="NotBoolToVisibility" Inverted="True" Not="True"/>
<Style x:Key="SomethingThatUsesVisibilityToBoolConvertersStyle" TargetType="SomeOtherControl">
....
</Style>
</ResourceDictionary>
la question que je vois est la suivante: quand je crée le BoolToVisibility et non Les objets BoolToVisibility (ainsi que l'instanciation d'autres objets qui sont des instances de classes personnalisées que j'ai créées) tout comme une partie Application.Resources, ils sont créés et toutes les références fonctionnent comme prévu; cependant, lorsque je les déplace dans un dictionnaire de ressources fusionné (comme dans l'exemple ci-dessus), j'obtiens une exception d'application malformée lors du chargement de l'application Silverlight. Je crois que c'est un problème avec la manière dont les objets sont instanciés différemment dans les Dictionnaires de ressources fusionnés (je crois qu'il s'agit plutôt d'une approche de chargement paresseux), mais je m'attendrais à ce que cela fonctionne néanmoins.
Je suis très capable d'ajouter des objets Style, DataTemplates, ControlTemplates et autres. Mais quand je veux créer des instances de classes personnalisées qui sont nommées ou saisies en utilisant Xaml, cela fonctionne très bien dans Application.Resources de App.xaml directement et Application.Resources/ResourceDictionary aussi. Dès qu'ils sont déplacés dans un dictionnaire fusionné, il lève l'exception. Est-ce par conception? D'autres idées qui fonctionnent? Merci d'avance ...