J'ai quelques styles dans mon fichier App.xaml
:
<SolidColorBrush x:Key="styleBlue" Color="#FF4B77BE"/>
<SolidColorBrush x:Key="styleRed" Color="#FFF64747"/>
<SolidColorBrush x:Key="styleOrange" Color="#FFF89406"/>
<SolidColorBrush x:Key="styleGreen" Color="#FF1BBC9B"/>
<SolidColorBrush x:Key="styleYellow" Color="#FFF9BF3B"/>
<Style x:Key="stackpanelBackground" TargetType="StackPanel">
<Setter Property="Background" Value="{StaticResource styleBlue}"/>
</Style>
Je veux changer la BackgroundProperty
dans le code de mon mainpage.xaml.cs
.
J'ai essayé d'utiliser ceci:
Style style = Application.Current.Resources["stackpanelBackground"] as Style;
style.Setters.SetValue(StackPanel.BackgroundProperty, "{StaticResource styleRed}");
Mais je reçois une exception d'échec catastrophique. Je pense que cela a à voir avec {StaticResource styleRed}
. Y a-t-il une meilleure manière de faire cela?
Pourquoi modifiez-vous le style au lieu de définir directement la propriété Background
- de votre StackPanel
ciblée? Puisqu'une «valeur locale» a une priorité supérieure à celle de «modificateurs de style», la valeur que vous écrivez dans Background
à partir du code précédent est utilisée
Veux dire:
(1) Donnez un nom à votre stackpanel x:Name="spBla"
(2) Affectez le pinceau à la Background
de spBla
(quelque chose comme spBla.Background=Application.Current.Resources["styleRed"] as SolidColorBrush;
)
Vous pouvez en apprendre plus sur la priorité des valeurs ici:
http://msdn.Microsoft.com/en-us/library/ms743230(v=vs.110).aspx
Si je comprends bien, vous souhaitez définir un style vous permettant de ne modifier que des panneaux de pile spécifiques, afin de ne pas avoir à les définir tous. Essayez cette suggestion (remarque: c'est une suggestion et je ne l'ai pas testée, mais j'espère que c'est dans la bonne direction)
<SolidColorBrush x:Key="styleBlue" Color="#FF4B77BE"/>
<SolidColorBrush x:Key="styleRed" Color="#FFF64747"/>
<SolidColorBrush x:Key="styleOrange" Color="#FFF89406"/>
<SolidColorBrush x:Key="styleGreen" Color="#FF1BBC9B"/>
<SolidColorBrush x:Key="styleYellow" Color="#FFF9BF3B"/>
<Style x:Key="stackpanelBackground" TargetType="StackPanel">
<Setter Property="Background" Value="{Binding Background, FallbackValue={StaticResource styleBlue}}"/>
</Style>
Ou essayez TemplateBinding au lieu de Binding, comme je l'ai dit c'est une suggestion et je ne l'ai pas testée. Cela vous donnerait une liaison pour l'arrière-plan et une valeur de secours pour un stackpanel pour lequel vous n'avez pas défini de couleur d'arrière-plan. Faites-moi savoir comment ou si cela fonctionne pour vous :)