XAML: Можете ли вы определить ресурсы приложения за пределами app.xaml?

72
10

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

<Grid Background="{DynamicResource sbL1}" \>

и в коде я бы назвал

Application.Current.Resources("sbL1") = new SolidColorBrush(Colors.Red)

Это прекрасно работает во время выполнения, но я получаю эти раздражающие подчеркивания в режиме дизайнера XAML. Очевидно, что ответ будет включать определение sbL1 в app.xaml, но я хочу, чтобы эта группа ui была как можно более PnP, например, добавила папку в проект и сделала. Итак... Можете ли вы определить ресурсы приложения за пределами app.xaml? Или какое-то другое обходное решение?

спросил(а) 2014-03-26T14:51:00+04:00 6 лет, 7 месяцев назад
1
Решение
91

Вы можете определить все свои ресурсы в словаре ресурсов следующим образом:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:options="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options">

<SolidColorBrush x:Key="BackgroundBrush"
Color="#FF171717"
options:Freeze="True"/>
<SolidColorBrush x:Key="ForegroundBrush"
Color="#FFFFFFFF"
options:Freeze="True"/>

</ResourceDictionary>

Добавьте словарь ресурсов в объединенные словари уровня приложения следующим образом:

Application.Current.Resources.MergedDictionartiesApplication.Current.Resources.MergedDictionaries.Add("<Path of Resource Dictionary>")

Затем используйте эти ресурсы в своем проекте как динамический ресурс:

<Grid Background="{DynamicResource BackgroundBrush}" \>

ответил(а) 2014-03-26T16:02:00+04:00 6 лет, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема