2011-01-11 3 views
1

J'ai une application WPF contenant MainWindow qui affiche juste un MainUserControl et il contient aussi App.xaml des dictionnaires: FusionRecourceDictionaries et convertisseurs personnalisés

<Application.Resources> 
    <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Resources\Styles.xaml"/> 
       <ResourceDictionary Source="Resources\DataTemplates.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
</Application.Resources> 

Puis j'ai décidé d'utiliser MainUserControl dans un autre projet où il devrait être affiché dans l'ElementHost. Malheureusement, cela ne fonctionne pas car les styles et DataTemplates des dictionnaires de ressources sont introuvables. Je ne sais pas la bonne façon de le résoudre sur mais j'ai décidé que je déplacer le code code ResourceDictionaries dans les ressources du MainUserControl:

<UserControl.Resources> 
    <ResourceDictionary> 
     <!-- the same code --> 
    </ResourceDictionary> 
</UserControl.Resources> 

Il a causé l'erreur avec mes convertisseurs je dans les dictionnaires de ressources - Impossible de créer inconnu tapez '{clrnamespace: MyApplication.Converters; assembly = MyApplication} LengthToStringConverter . J'ai essayé de déplacer des convertisseurs en dehors des dictionnaires de ressources en ajoutant un plus ResourceDictionary avec mes convertisseurs:

 <ResourceDictionary> 
      <con:LengthToStringConverter x:Key="textConverter"/> 
      <con:DateToTextConverter x:Key="dateConverter"/> 
     </ResourceDictionary> 

Il a également provoqué une exception XAML (Fournir la valeur sur « System.Windows.StaticResourceExtension » a jeté une exception.). Donc, ce que je cherche, c'est la façon de résoudre le problème avec les convertisseurs qui ne peuvent pas être trouvés dans les dictionnaires de ressources ou une autre façon de résoudre le problème d'utilisation de la classe MainUserControl dans un autre projet (il ne trouve pas de ressources , peut-être, il y a un moyen de les spécifier?).

Répondre

1

Il semble que vous ayez défini vos ressources dans votre projet principal. Cela signifie que vous pouvez utiliser les ressources uniquement dans ce projet. Si vous utilisez ensuite votre MainUserControl dans un autre projet, ce projet ne connaît pas le projet principal et ses ressources - c'est pourquoi l'erreur est survenue.

Si vous souhaitez réutiliser vos ressources dans une autre application/projet, vous devez déplacer toutes vos ressources vers un ensemble/projet de base distinct. Vous pouvez ensuite référencer ce projet de base à partir des deux applications/projets, afin que les ressources puissent être chargées à partir des deux applications.

+0

Enfin, j'ai créé des assemblages séparés pour les convertisseurs/contrôles personnalisés, les styles, et l'application principale et après l'avoir fait fonctionner. –

Questions connexes