Загрузка стилей WPF или других статических ресурсов из внешнего файла или сборки

У меня есть несколько приложений WPF, и я хочу, чтобы все мои стили находились в общей сборке, а не объявляли их в каждом приложении отдельно.

Я ищу способ, чтобы мне не пришлось менять все свои Style="{StaticResource BlahBlah}" в существующих приложениях; Я просто хочу добавить ссылку на эту сборку стиля и удалить ее из текущего приложения, чтобы она была взята из сборки.

Там в любом случае?


person Shimmy Weitzhandler    schedule 01.04.2009    source источник


Ответы (1)


Ссылка на внешний ResourceDictionary (файл XAML):

<Application.Resources>
    <ResourceDictionary Source="MyResources.xaml" />
</Application.Resources>

Ссылка на внешний ResourceDictionary (DLL):

<Application.Resources>
    <ResourceDictionary Source="/MyExternalAssembly;component/MyResources.xaml" />
</Application.Resources>
person Shimmy Weitzhandler    schedule 01.04.2009
comment
Но не могли бы вы сказать, как мы можем переопределить стиль, который существует в xaml-файле ресурсов в другой сборке? Например: стиль, для которого установлено свойство Foreground, и это стиль по умолчанию (у которого нет x: Key). Тогда я просто хочу изменить свойство Background. Я использовал BaseOn, но он не работает. :( - person Amir Karimi; 08.02.2011
comment
@amkh, как только этот стиль будет импортирован в область видимости, вы можете повторно объявить и переопределить его, создав новый стиль на высоком уровне области, установив его BasedOn на {StaticResource {x:Type TextBox}} (заменив TextBox на соответствующий тип. - person Shimmy Weitzhandler; 08.02.2011
comment
Большое спасибо. Моя ошибка заключалась в том, что я создавал стиль в неправильном месте, когда использовал BasedOn. - person Amir Karimi; 09.02.2011
comment
Что насчет того, если UserControl, который будет использовать эти ресурсы, находится в проекте библиотеки классов, а App.xaml отсутствует? - person JoanComasFdz; 10.01.2012
comment
@JoanComasFdz Вы можете ссылаться на этот словарь ресурсов где угодно. Вы даже можете добавить это к тому, что ресурсы управления пользователями. Но я думаю, что вы можете сослаться на это в Themes\Generic.xaml Я не пробовал, но это может сработать. - person Shimmy Weitzhandler; 10.01.2012
comment
@Shimmy Спасибо за ответ, но на самом деле я имел в виду, как я могу ссылаться на него в коде XAML WPF UserControl в проекте библиотеки классов, где нет тега Application.Resources? - person JoanComasFdz; 10.01.2012
comment
См. здесь - также применимо к Silverlight. Добавьте свои ресурсы в Generic.xaml. - person Shimmy Weitzhandler; 29.01.2012
comment
Важно то, что действие сборки вашего файла ресурсов должно быть установлено на ресурс, а не на встроенный ресурс. Со встроенным ресурсом это не работает. - person AnjumSKhan; 21.09.2015
comment
Как ссылаться на несколько файлов ресурсов? - person Legends; 15.08.2016
comment
есть ли способ сделать это без ResourceDictionary? просто загружаете внешний файл xaml? - person Radinator; 17.02.2017