Словарь ресурсов для DLL в C# WPF - PullRequest
0 голосов
/ 22 января 2020

Есть ли способ загрузить словарь ресурсов один раз для DLL и использовать его во всех элементах управления? Я попытался создать приложение в DLL, которая содержит только словарь ресурсов. Неудивительно, что это не работает.

После устранения проблемы с Build Action возникает исключение при создании нескольких приложений.

<Application
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Application.Resources>
    <ResourceDictionary Source="pack://application:,,,/HelperWPF;component/Display/DefaultDictionary.xaml"/>
  </Application.Resources>
</Application>

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Я смог использовать тот же экземпляр словаря ресурсов, сделав следующий класс c class:

internal static class LoadResourceDictionary
{
    static LoadResourceDictionary()
    {
        resourceDictionary = Application.LoadComponent(new Uri("/DllName;component/Shared/ReusedDictionary.xaml",UriKind.RelativeOrAbsolute)) as ResourceDictionary;
    }

    public static ResourceDictionary resourceDictionary;
}

Затем ссылаясь на него в классе

public SingleAlarm_UC()
{
    this.Resources = LoadResourceDictionary.resourceDictionary;
    InitializeComponent();
}
0 голосов
/ 22 января 2020

Вам нужен тег MergedDictionaries, даже если это всего лишь один ResourceDictionary

<ResourceDictionary >
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="pack://application:,,,/App.Resources;component/Styles/Brushes.xaml" />
         <ResourceDictionary Source="pack://application:,,,/App.Resources;component/Styles/Fonts.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

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

...