Вопрос

У меня есть файлы словаря ресурсов (MenuTemplate.xaml, ButtonTemplate.xaml и т.д.), которые я хочу использовать в нескольких отдельных приложениях.Я мог бы добавить их в сборки приложений, но будет лучше, если я скомпилирую эти ресурсы в одну сборку и мои приложения будут ссылаться на нее, не так ли?

После сборки ресурса, как я могу ссылаться на него в App.xaml моих приложений?В настоящее время я использую ResourceDictionary.MergedDictionaries для объединения отдельных файлов словаря.Если они у меня есть в сборке, как я могу ссылаться на них в xaml?

Это было полезно?

Решение

Ознакомьтесь с синтаксисом URI пакета . Вы хотите что-то вроде этого:

<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Subfolder/YourResourceFile.xaml"/>

Другие советы

Пример, просто чтобы ответить на этот вопрос за 15 секунд -

Допустим, у вас есть "styles.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

Resource-Only 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 в StackOverflowApp проекте.

Структура проектов :

 Структура проектов

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

Вывод кода:

 Output

PS: все Build Action файлы должны иметь Resource значение Page или <=>.

Использование C #:

  

Если кому-то нужно решение в чисто c # code , тогда посмотрите мой это   Решение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top