ResourceDictionary в отдельной сборке



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



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

577   6  

6 ответов:

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

<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:///. Приложение: / / / authority определяет файлы данных приложения, которые известны во время компиляции, включая файлы ресурсов и контента. Этот 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
 }

выход: если мы хотим использовать ResourceDictionaryRD1.xaml проекта WpfControlLibrary1 на .

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

Structure of Projects

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

Код Вывода:

Output

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

С Помощью C#:

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

Comments

    Ничего не найдено.