Словарь общих ресурсов между несколькими пользовательскими элементами управления и между сборками - PullRequest
17 голосов
/ 01 апреля 2009

У меня есть сборка, которая содержит несколько пользовательских элементов управления. Для этой сборки пользовательских элементов управления я хочу иметь словарь ресурсов. Все пользовательские элементы управления в сборке должны иметь доступ к словарю ресурсов. Должен ли я добавить

<UserControl.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      ...
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</UserControl.Resources>

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

Могу ли я также сослаться на него в моем основном приложении или для этого также требуется вызов MergedDictionaries?

Редактировать: основное приложение находится в отдельном проекте / сборке, чем пользовательские элементы управления.

Ответы [ 3 ]

11 голосов
/ 01 апреля 2009

есть ли какой-нибудь способ поместить его в одно место и просто сослаться на него?

Поместите ссылку на объединенные словари на ваши словари ресурсов в файл App.xaml, и он будет доступен во всем приложении, вам не понадобится дополнительная ссылка.

Могу ли я также сослаться на него в моем основном приложении или для этого также требуется вызов MergedDictionaries?

Нет, область действия «App.xaml» не распространяется на все приложение, поэтому это должно работать нормально (подходит для меня :)).

Обновление: Как ссылаться на сохраненные в словаре ресурсов элементы из пользовательского элемента управления.

В вашем основном проекте добавьте ссылку на вашу пользовательскую библиотеку управления. Ваши пользовательские элементы управления будут доступны, и вы можете использовать их в своем приложении по желанию.

Процесс добавления ссылки на словарь ресурсов в App.xaml будет означать, что все элементы управления могут ссылаться на стили, шаблоны данных и т. Д., Определенные в словарях ресурсов, поэтому это просто вопрос ссылки на них:

например.

Style="{StaticResource MyButtonStyle}"

Этот метод работает как для составных приложений, так и для обычных приложений WPF. Обратите внимание, что Visual Studio плохо справляется с загрузкой этих стилей из связанных файлов XAML (словарь ресурсов), но сочетание выражений работает с ними и дает предварительный просмотр редактора.

3 голосов
/ 15 сентября 2009

Вы можете использовать Pack URL для ссылки на словари ресурсов в разных сборках. Например, в проектах Prism (в которых есть несколько модулей, каждый в своей сборке), я храню свои общие словари ресурсов в папке ResourceDictionaries в проекте под названием Common . Затем я при необходимости объединяю эти словари с модулями приложения, используя разметку, аналогичную приведенной в представлении XAML каждого модуля:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/Common;component/ResourceDictionaries/DemoDictionary.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

Вы можете найти дополнительную информацию здесь .

2 голосов
/ 26 июня 2009

Если подход «App.xaml» не работает для вас, вы можете быть заинтересованы в этом обсуждении:

Рекомендации: как обрабатывать общие ресурсы в модульном приложении?

JBE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...