Динамическая загрузка файлов словаря ресурсов в приложение wpf дает ошибку

Я пытаюсь добавить файл ресурса xaml динамически, используя оператор,

Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("resources/leaf_styles.xaml", UriKind.Relative) });

это исключение, не удается найти ресурс ' resources / leaf_styles.в XAML'.

я добавил leaf_styles.файл xaml для проекта в папке ресурсов и BuildAction имеет значение "содержимое", CopyAlways имеет значение True. Тем не менее я получаю эту ошибку. Может ли кто-нибудь помочь мне указать, что не так??

дополнительная информация -

  • Я не хочу вставлять файл xaml в качестве ресурса
  • текущий проект является проектом библиотеки классов .net 3.5
  • приведенный выше оператор mergedictionary написан в классе, принадлежащем к тому же проекту
  • Я также добавил [assembly: AssemblyAssociatedContentFile ("resources/leaf_styles.xaml")] вручную, как только я понял, что это не работает (для тестирование)

обновление

Если я даю его как абсолютное местоположение, он работает правильно.

Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri(@"D:footrunkbinresourcesleaf_styles.xaml", UriKind.Absolute) });

3 ответов


наконец, это сработало. Вот что я сделал

  1. прошел через'http://msdn.microsoft.com/en-us/library/aa970069.aspx.
  2. изменил шаблон Uri на

    var foo = new Uri("pack://siteoforigin:,,,/resources/leaf_styles.xaml", UriKind.RelativeOrAbsolute);
    Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = foo });
    

чтобы загрузить файл содержимого, вы можете вызвать GetContentStream метод класса приложения, передавая URI пакета, который идентифицирует нужный файл содержимого.

оформить заказ

http://msdn.microsoft.com/en-us/library/aa970494.aspx#Content_Files

редактировать

Я сделал это успешно, как это

    Uri uri = new Uri("Resources/MyDict.xaml", UriKind.Relative);
    StreamResourceInfo info = Application.GetContentStream(uri);
    System.Windows.Markup.XamlReader reader = new System.Windows.Markup.XamlReader();
    ResourceDictionary myResourceDictionary = 
                                   (ResourceDictionary)reader.LoadAsync(info.Stream);
    Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);

Я столкнулся с той же" проблемой отсутствия ресурсов " и часами чесал голову. Тогда я понял, что мое имя сборки содержит точки (.) и изменил имя сборки ресурса, протестировал снова, и это сработало. Это был файл изображения 16x16 png, который я хотел загрузить. Но я вижу, что пунктирные имена сборок вызывают ошибку для случаев soma и не вызывают ошибки для других случаев.

  • 1) Если вы загружаете стиль из ресурса, он работает
  • 2) Если вы загружаете изображение, оно не работает. Ресурс не найден.

Я использовал тот же код для обоих случаев, но результаты разные. Я не знаю, является ли это ошибкой wpf.