Динамическая загрузка файлов словаря ресурсов в приложение 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 ответов
наконец, это сработало. Вот что я сделал
- прошел через'http://msdn.microsoft.com/en-us/library/aa970069.aspx.
-
изменил шаблон 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.