Динамическая установка стилей ресурсов посредством привязки в WPF - PullRequest
1 голос
/ 08 сентября 2011

Я пытаюсь сделать цветовую схему моего приложения динамической, чтобы у меня было значение цвета в свойстве (возможно, исходя из базы данных), которое определяет цветовую схему моего приложения.

У меня есть файл 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", возвращающее строку "Teal", чтобы изменить цвет этого SolidColorBrush из его FallbackValue. Сейчас я жестко программирую цвет, но именно здесь я хотел бы получить свою ценность из базы данных в будущем. Цвет в настоящее время не меняется, поэтому я предполагаю, что в моем источнике привязки что-то не так, поскольку он явно не работает так, как мне кажется.

Спасибо

Клара

1 Ответ

1 голос
/ 08 сентября 2011

Похоже, проблема в Binding вашей собственности *1002*.

  1. Там тип предка должен быть ApplicationArchitecture:MainWindow и , а не ApplicationArchitecture:ViewModelBase.

  2. Путь должен включатьDataContext в нем.

Вот так ....

  <SolidColorBrush x:Key="ApplicationMainBackgroundBrush"
                   Color="{Binding Path=DataContext.MainApplicationColor,
                              RelativeSource={RelativeSource FindAncestor, 
                                  AncestorType={x:Type ApplicationArchitecture:MainWindow},
                                      Mode=FindAncestor},
                                          FallbackValue=CornflowerBlue}"/>

Дайте мне знать, если это поможет.

...