Question

Je suis en train de faire le jeu de couleurs de ma dynamique d'application afin que je puisse avoir une valeur de couleur dans une propriété (à venir, espérons à partir de la base de données) qui détermine le schéma de couleurs de mon application.

J'ai un fichier Resources.xaml où je mets mes couleurs et de styles pour l'application, que je l'utilise ensuite dans toutes mes commandes et les fenêtres. Je voudrais lier la couleur d'un SolidColorBrush dans le fichier de ressources à une propriété dans mes ViewModel (s) de telle sorte que cette couleur peut changer en fonction de la valeur de l'application en cours. Voici ce que j'ai jusqu'à présent, mais il ne fonctionne pas si je dois manquer quelque chose.

code dans le fichier Resources.xaml:

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

code dans le fichier MainWindow.xaml:

<Grid Grid.Row="0" x:Name="gridControl" Background="{DynamicResource ApplicationMainBackgroundBrush}">

Le DataContext de mon MainWindow.xaml est une classe appelée ApplicationViewModel, qui hérite de ViewModelBase, qui possède une propriété « MainApplicationColor » retourner la chaîne « Teal » pour changer la couleur de cette SolidColorBrush de lui est FallbackValue. Je codage en dur la couleur pour l'instant, mais c'est là que je voudrais obtenir ma valeur de la base de données à l'avenir. La couleur actuellement ne change pas, donc je suppose qu'il ya quelque chose de mal dans ma source de liaison car il ne fonctionne manifestement pas comme je pense qu'il devrait.

Merci,

Klara

Était-ce utile?

La solution

Le problème semble être la SolidColorBrush.Color de votre propriété Binding.

  1. le type ancêtre doit être ApplicationArchitecture:MainWindow et pas ApplicationArchitecture:ViewModelBase.

  2. Le chemin doit inclure le DataContext en elle.

Comme cela ....

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

Laissez-moi savoir si cela aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top