Общий словарь ресурсов между несколькими пользовательскими элементами управления и сборками
У меня есть сборка, содержащая несколько пользовательских элементов управления. Для этого элемента управления пользователя я хочу иметь словарь ресурсов. Все пользовательские элементы управления в сборке должны иметь доступ к ресурсному словарю. Должен ли я добавить
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
...
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
для каждого пользовательского элемента управления, который должен использовать словарь ресурсов, или есть способ его разместить в одном месте и просто ссылаться на него?
Могу ли я также ссылаться на него в моем основном приложении, или же это требует вызова MergedDictionaries?
Изменить: основное приложение находится в отдельном проекте/сборке, чем пользовательские элементы управления.
Ответы
Ответ 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>
Вы можете найти дополнительную информацию здесь.
Ответ 3
Если подход "App.xaml" не работает для вас, вы можете быть заинтересованы в этом обсуждении:
Рекомендации: как обрабатывать общие ресурсы в модульном приложении?
JBE