Настройка стилей ресурсов динамически через привязку в WPF
-
28-10-2019 - |
Вопрос
Я пытаюсь сделать цветовую схему динамики моего приложения, чтобы я мог иметь значение цвета в свойстве (надеюсь, из базы данных), которая определяет цветовую схему моего приложения.
У меня есть файл resources.xaml, в котором я устанавливаю свои цвета и стили для приложения, который я затем использую во всех своих элементах управления и окон. Я хотел бы связать цвет SolidColorbrush в файле ресурсов с свойством в моем ViewModel (ы), чтобы этот цвет мог измениться на основе текущего значения приложения. Вот что у меня есть до сих пор, но это не работает, поэтому я, должно быть, что -то упускаю.
Код в файле resources.xaml:
<SolidColorBrush x:Key="ApplicationMainBackgroundBrush" Color="{Binding Path=MainApplicationColor, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type ApplicationArchitecture:ViewModelBase}, Mode=FindAncestor}, FallbackValue=CornflowerBlue}"/>
Код в файле mainwindow.xaml:
<Grid Grid.Row="0" x:Name="gridControl" Background="{DynamicResource ApplicationMainBackgroundBrush}">
DataContext моего mainwindow.xaml - это класс под названием ApplicationViewModel, который наследует от ViewModelBase, который имеет свойство «MainApplicationColor», возвращая строку «чирка», чтобы изменить цвет этого SolidColorBrush с его SwardbackValue. Я пока кодирую цвет, но именно здесь я хотел бы получить свою ценность из базы данных в будущем. Цвет в настоящее время не меняется, поэтому я предполагаю, что в моем источнике связующего источника что -то не так, поскольку он явно не работает так, как я думаю.
Спасибо,
Клара
Решение
Проблема кажется вашей SolidColorBrush.Color
собственность Binding
.
Там должен быть тип предка
ApplicationArchitecture:MainWindow
а также нетApplicationArchitecture:ViewModelBase
.Путь должен включать
DataContext
в этом.
Как это....
<SolidColorBrush x:Key="ApplicationMainBackgroundBrush"
Color="{Binding Path=DataContext.MainApplicationColor,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ApplicationArchitecture:MainWindow},
Mode=FindAncestor},
FallbackValue=CornflowerBlue}"/>
Позвольте мне знать, если это помогает.