ResourceDictionary в отдельной сборке
У меня есть файлы словаря ресурсов (MenuTemplate.в XAML, ButtonTemplate.xaml и т. д.), которые я хочу использовать в нескольких отдельных приложениях. Я мог бы добавить их в сборки приложений, но лучше, если я скомпилирую эти ресурсы в одной сборке и мои приложения будут ссылаться на нее, верно?
после сборки ресурса, как я могу ссылаться на него в приложении.xaml моих приложений? В настоящее время я использую ResourceDictionary.MergedDictionaries объединить отдельные файлы словарей. Если они есть в сборке, как я могу ссылаться на них в xaml?
6 ответов
Проверьте URI типа "Pack" синтаксис. Вы хотите что-то вроде этого:
<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Subfolder/YourResourceFile.xaml"/>
пример, просто чтобы сделать это 15 секунд ответ -
скажем, у вас есть "стили.xaml " в библиотеке WPF с именем "common", и вы хотите использовать его из своего основного проекта приложения:
- добавить ссылку из основного проекта в "общий проект"
- приложение.xaml должен содержать:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Common;component/styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Ура
Я работаю с .NET 4.5 и не могу заставить это работать... Я использовал библиотеку пользовательских элементов управления WPF. В конце концов это сработало...
<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: / / / орган определяет сайт исходных файлов. Масштаб о каждом органе показано в следующем фигура.
для UWP:
<ResourceDictionary Source="ms-appx:///##Namespace.External.Assembly##/##FOLDER##/##FILE##.xaml" />
использование XAML:
если вы знаете другие assembly
структура и хотят, чтобы resources
на c# код, затем используйте ниже код:
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
на .
структура проекты:
Код Вывода:
PS: все ResourceDictionary
файлы Build Action
as'Resource
' или 'Page
'.
На C#:
если кто-то хочет решение в чисто C# код тогда смотри мой этот решение.