Настройка стилей ресурсов динамически через привязку в WPF

StackOverflow https://stackoverflow.com/questions/7351430

Вопрос

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

У меня есть файл 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.

  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}"/>

Позвольте мне знать, если это помогает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top