I have the following scenario:
<UserControl.Resources>
<Style x:Key="NormalFontStyle">
<Setter Property="Control.FontFamily" Value="{Binding MyFont}"></Setter>
</Style>
<Style x:Key="BigFontStyle">
<Setter Property="Control.FontFamily" Value="{Binding MyFont}"></Setter>
<Setter Property="Control.FontSize" Value="{Binding MyBigFontSize}"></Setter>
</Style>
</UserControl.Resources>
<Grid Style="{StaticResource NormalFontStyle}">
<!-- Grid Contents -->
</Grid>
The DataContext of the Grid is the ViewModel containing MyFont and MyBigFontSize properties. The above code works properly, and every text inside the grid has "NormalFontStyle" applied.
Now the tricky part: I want to apply the "BigFontStyle" to a control inside the grid that may or may not have the same DataContext, which means that i cannot use this approach. Maybe binding the Values of the setters to static properties is the only way to go, (i just found this workaround for 3.5, which is my case here) but any light on this is welcome.
You should put you properties into a singleton, this way you can bind to and edit them from anywhere in your application.
MySingleton.cs (ViewModelBase contains an implementation of INotifyPropertyChanged)
App.xaml
MyResourceDictionary.xaml
Now you can use to your stlyes from anywhere in your application:
And to set a value in c# use: