1

我正在尝试使我的应用程序的配色方案动态化,以便我可以在确定我的应用程序配色方案的属性(希望来自数据库)中有一个颜色值。

我有一个 Resources.xaml 文件,我在其中设置应用程序的颜色和样式,然后在我的所有控件和窗口中使用它们。我想将资源文件中 SolidColorBrush 的颜色绑定到我的 ViewModel(s) 中的属性,以便此颜色可以根据当前应用程序值更改。这是我到目前为止所拥有的,但它不起作用,所以我一定错过了一些东西。

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

我的 MainWindow.xaml 的 DataContext 是一个名为 ApplicationViewModel 的类,它继承自 ViewModelBase,它有一个属性“MainApplicationColor”,返回字符串“Teal”,以改变 SolidColorBrush 的颜色,使其与 FallbackValue 不同。我现在正在对颜色进行硬编码,但这是我希望将来从数据库中获取价值的地方。颜色目前没有改变,所以我假设我的绑定源有问题,因为它显然没有像我认为的那样工作。

谢谢,

克拉拉

4

1 回答 1

1

问题似乎是您的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}"/>

让我知道这是否有帮助。

于 2011-09-08T16:53:49.887 回答