I have a few styles in my App.xaml
file:
<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>
I want to change the BackgroundProperty
in the code of my mainpage.xaml.cs
.
I tried using this:
Style style = Application.Current.Resources["stackpanelBackground"] as Style;
style.Setters.SetValue(StackPanel.BackgroundProperty, "{StaticResource styleRed}");
But I get a catastrophic failure exception. I think it has to do with {StaticResource styleRed}
. Is there a better way to do this?
If I understand correctly, you are wanting to set up a style that allows you to only change specific stackpanels, so you don't have to set them all. Give this suggestion a try (note: it is a suggestion and I have not tested it, but hopefully it is in the right direction)
Or try TemplateBinding instead of Binding, like I said it is a suggestion and I haven't tested it. This would give you a binding for the background, and a fallback value for a stackpanel that you haven't set a background color for. Let me know how or if this works for you :)
A
StaticResource
is static. You can't change them once the application has compiled.For this purpose, there is
DynamicResource
:Also note that you can find the reference to the other resource better using
FindResource
. Try something like this (full working sample):In
MainPage.xaml
:In
MainPage.xaml.cs
:Why are you modifying the Style instead of setting the
Background
-Property of your targetedStackPanel
directly? Since a 'Local value' has a higher precedence than 'Style setters' the value that you write intoBackground
from code behind would be usedMeans:
(1) Give a name to your stackpanel
x:Name="spBla"
(2) Assign the Brush to the
Background
ofspBla
( something likespBla.Background=Application.Current.Resources["styleRed"] as SolidColorBrush;
)You can learn more about value precedence here:
http://msdn.microsoft.com/en-us/library/ms743230(v=vs.110).aspx