我正在尝试使我的应用程序的颜色方案动态化,以便我可以在属性中有一个颜色值(希望来自数据库),这决定了我的应用程序的颜色方案。
我有一个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的颜色。我现在很难对颜色进行编码,但这是我希望将来从数据库中获取价值的地方。颜色目前没有变化,所以我假设我的绑定源有问题,因为它显然不像我认为的那样工作。
谢谢,
克拉拉
答案 0 :(得分:1)
问题似乎是您的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}"/>
如果有帮助,请告诉我。