Доступ к ресурсам в Xaml через проекты / библиотеки - PullRequest
7 голосов
/ 30 октября 2009

Можно ли ссылаться на активы Xaml, хранящиеся в ResourceDictionary (build action = resource) из другого проекта? Я хотел бы либо объединить ресурсы в словарь ресурсов основного проекта, либо получить к ним доступ по отдельности. Например:

  • Проект "MyResources" содержит папку с именем "Assets", которая имеет ResourceDictionary с именем "MyAssets.xaml", который содержит стиль с именем "ButtonStyle"
  • Проект "MainProject" ссылается на MyResources; в MainWindow.xaml

В MainWindow.xaml я хотел бы сделать что-то вроде:

<ResourceDictionary.MergedResources>
    <ResourceDictionary Source="/MyResources/Assets/MyAssets.xaml"/>
</ResourceDictionary.MergedResources>

Или, если это невозможно, возможно:

<Button Style="{StaticResource /MyResources/Assets/MyAssets.xaml}"/>

Есть ли способ ссылаться на вещи в MyResources из MainProject?

Ответы [ 3 ]

14 голосов
/ 30 октября 2009

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

<ResourceDictionary.MergedResources>
  <ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Subfolder/YourResourceFile.xaml"/>
</ResourceDictionary.MergedResources>
13 голосов
/ 11 декабря 2012
<ResourceDictionary Source="/Commons;component/Themes/TreeStyle.xaml" />

Где:

Commons - это название внешнего проекта

/ Themes / TreeStyle.xaml соответствует расположению файла стиля в проекте Commons

; компонент всегда требуется

4 голосов
/ 30 октября 2009

Вы можете объединить ресурсы из вашего проекта в ваш основной словарь, используя этот метод:

/// <summary>
/// Loads a resource dictionary from a URI and merges it into the application resources.
/// </summary>
/// <param name="resourceLocater">URI of resource dictionary</param>
public static void MergeResourceDictionary(Uri resourceLocater)
{
    if (Application.Current != null)
    {
        var dictionary = (ResourceDictionary) Application.LoadComponent(resourceLocater);
        Application.Current.Resources.MergedDictionaries.Add(dictionary);
    }
}

Назовите это так:

MergeResourceDictionary(new Uri(@"/MyOtherAssembly;component/MyOtherResourceDictionary.xaml", UriKind.Relative));                                                           
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...