Ответ 1
Проверьте синтаксис URI пакета. Вы хотите что-то вроде этого:
<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Subfolder/YourResourceFile.xaml"/>
У меня есть файлы словаря ресурсов (MenuTemplate.xaml, ButtonTemplate.xaml и т.д.), которые я хочу использовать в нескольких отдельных приложениях. Я мог бы добавить их в сборки приложений, но лучше, если я скомпилирую эти ресурсы в одной сборке и привяжусь к моим приложениям, не так ли?
После сборки сборки ресурсов, как я могу ссылаться на нее в App.xaml моих приложений? В настоящее время я использую ResourceDictionary.MergedDictionaries для объединения отдельных файлов словарей. Если у меня есть их в сборке, как я могу ссылаться на них в xaml?
Проверьте синтаксис URI пакета. Вы хотите что-то вроде этого:
<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Subfolder/YourResourceFile.xaml"/>
Пример, просто чтобы ответить на 15 секунд -
Предположим, что у вас есть "styles.xaml" в библиотеке WPF с именем "common", и вы хотите использовать его из основного проекта приложения:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Common;component/styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Приветствия
Я работаю с .NET 4.5 и не могу заставить это работать... Я использовал WPF Custom Control Library. Это сработало для меня в конце концов...
<ResourceDictionary Source="/MyAssembly;component/mytheme.xaml" />
источник: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/11a42336-8d87-4656-91a3-275413d3cc19
Только для ресурсов DLL - это вариант для вас. Но это необязательно, если вы не хотите изменять ресурсы без перекомпиляции приложений. Есть только один общий файл ResourceDictionary. Это зависит от того, как часто вы меняете ресурсы и т.д.
<ResourceDictionary Source="pack://application:,,,/
<MyAssembly>;component/<FolderStructureInAssembly>/<ResourceFile.xaml>"/>
MyAssembly - просто имя сборки без расширения
FolderStructureInAssembly - если ваши ресурсы находятся в папке, укажите структуру папок
Когда вы это делаете, лучше знать siteOfOrigin.
WPF поддерживает два органа: application:///и siteoforigin:///. Владелец приложения:///идентифицирует файлы данных приложений, которые известны во время компиляции, включая файлы ресурсов и содержимого. siteoforigin:///полномочия идентифицируют сайт исходных файлов. Объем каждого органа власти показано на следующем рисунке.
Использование XAML:
Если вы знаете другую структуру assembly
и хотите, чтобы код resources
в С#, используйте ниже код:
ResourceDictionary dictionary = new ResourceDictionary();
dictionary.Source = new Uri("pack://application:,,,/WpfControlLibrary1;Component/RD1.xaml", UriKind.Absolute);
foreach (var item in dictionary.Values)
{
//operations
}
Вывод: Если мы хотим использовать ResourceDictionary
RD1.xaml
проекта WpfControlLibrary1
в проекте StackOverflowApp
.
Структура проектов:
Выход кода:
PS: Все ResourceDictionary
Файлы должны иметь Build Action
как 'Resource
' или 'Page
'.
Использование С#:
Если кто-то хочет решение в чисто С# code, тогда посмотрите на мой этот Решение.
Для UWP:
<ResourceDictionary Source="ms-appx:///##Namespace.External.Assembly##/##FOLDER##/##FILE##.xaml" />