WPF: ресурсы приложений, эквивалентные в DLL - PullRequest
7 голосов
/ 28 декабря 2010

У меня есть два проекта в моем решении. Первый проект - приложение WPF , другой - обычный проект DLL . Внутри проекта DLL у меня есть некоторые пользовательские элементы управления WPF. Я хочу, чтобы эти элементы управления разделяли некоторые ресурсы и определяли их в DLL.

Я знаю, что в обычном приложении WPF вы можете указать ресурсы приложения в App.xaml. Есть ли эквивалент в проекте DLL?

Ответы [ 2 ]

5 голосов
/ 28 декабря 2010

Да, вы можете создать ресурс XAML в DLL следующим образом (убедитесь, что у вас есть все сборки WPF, на которые есть ссылки в DLL):

<!-- name of the dictionary is MyResources in MyDLL namespace -->
<ResourceDictionary x:Class="MyDLL.MyResources"
                    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="./Controls/ButtonStyles.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

и добавить это к ресурсам вашего класса App вваш проект WPF:

public App()
{
    MyDLL.MyResources externalRes = new MyDLL.MyResources();

    this.Resources.Add("MyExternalResources", externalRes);
}
2 голосов
/ 28 декабря 2010

Нет, в dll нет эквивалента, потому что загрузка ресурса не является частью сборки (exe), а частью приложения.Для загрузки ресурсов приложение должно быть загружено.Приложение является корневым элементом приложения, а не сборкой exe.Чтобы сделать эквивалент для элементов управления в dll, вы можете создать отдельный ResourceDictionary и добавить его в XAML каждого элемента управления, объединив его с ресурсами UserControl с помощью ResourceDictionary.MergedDictionaries.

...