通过WPF中的绑定动态设置资源样式

时间:2011-09-08 16:30:28

标签: wpf color-scheme dynamicresource ancestor

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

我有一个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}">

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

谢谢,

克拉拉

1 个答案:

答案 0 :(得分:1)

问题似乎是您的SolidColorBrush.Color媒体资源Binding

  1. 祖先类型应为ApplicationArchitecture:MainWindow ApplicationArchitecture:ViewModelBase

  2. 路径应包含DataContext

  3. 喜欢这个......

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

    如果有帮助,请告诉我。