Подтвердить что ты не робот

Общий словарь ресурсов между несколькими пользовательскими элементами управления и сборками

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

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

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

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

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

4b9b3361

Ответ 1

Есть ли способ разместить его в одном месте и просто ссылаться на него?

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

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

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

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

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

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

например.

Style="{StaticResource MyButtonStyle}"

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

Ответ 2

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

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

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