I have an issue with changing the Dynamic Resource style on a control (in the example it is a datepicker but I want to change it for a lot of different controls). I have a style for enabled and one for disabled and the disabled style is based on the enabled one. This works a treat. I want to be able to change the style when clicking a button (enabled to disabled and vice versa) but after some searching, the code I have come up with, just doesn't work.
This is the XAML in the resource dictionary
<!--DatePicker Resource--> <Style x:Key="appDatePicker" TargetType="{x:Type DatePicker}"> <Setter Property="FontFamily" Value="{Binding Source={StaticResource userSettings}, Path=Default.userFontFamily}" /> <Setter Property="FontSize" Value="{Binding Source={StaticResource userSettings}, Path=Default.userFontNormalSize}" /> <Setter Property="Height" Value="Auto" /> <Setter Property="MinWidth" Value="{Binding Source={StaticResource userSettings}, Path=Default.userControlWidth}" /> <Setter Property="Background" Value="{Binding Source={StaticResource userSettings}, Path=Default.userControlBackground}" /> <Setter Property="IsEnabled" Value="True"/> </Style> <!--DatePicker Disabled Resource--> <Style x:Key="appDatePickerDisabled" TargetType="{x:Type DatePicker}" BasedOn="{DynamicResource appDatePicker}"> <Setter Property="IsEnabled" Value="False"/> </Style> This is the code behind to change it to the disabled style:
datepickerEDP.SetResourceReference(Control.StyleProperty, "appDatePickerDisabled"); and for the enabled style
datepickerEDP.SetResourceReference(StyleProperty, "appDatePicker"); The error I get when running this code is
System.Windows.Markup.XamlParseException occurred HResult=-2146233087 LineNumber=0 LinePosition=0 Message=A 'DynamicResourceExtension' cannot be set on the 'BasedOn' property of type 'Style'. A 'DynamicResourceExtension' can only be set on a DependencyProperty of a DependencyObject.
Source=PresentationFramework StackTrace: at MS.Internal.Helper.CheckCanReceiveMarkupExtension(MarkupExtension markupExtension, IServiceProvider serviceProvider, DependencyObject& targetDependencyObject, DependencyProperty& targetDependencyProperty) InnerException:
This to me indicates that I can't use a based-on style but even if I changed the disabled style to include everything on the enabled style and removed the BasedOn tag it still fails. Does anyone have any ideas where I am going wrong? This is really doing one's nut in :(
BasedOn="{StaticResource appDatePicker}".<Setter Property="IsEnabled" Value="False"/>already overrides base settings,'DynamicResourcehas different purpose. it should fix the exception, but maybe another approach like using style triggers will be even simpler