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", и вы хотите использовать его из своего основного проекта приложения:

  1. добавить ссылку из основного проекта в "общий проект"
  2. приложение.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: / / / орган определяет сайт исходных файлов. Масштаб о каждом органе показано в следующем фигура.

enter image description here


для 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 на .

структура проекты:

Structure of Projects

ресурс Словарь: Resource Dictionary

Код Вывода:

Output

PS: все ResourceDictionary файлы Build Action as'Resource' или 'Page'.

На C#:

если кто-то хочет решение в чисто C# код тогда смотри мой этот решение.