我在更改控件上的动态资源样式时存在问题(例如它是日期选择器,但我想更改它以适用于很多不同的控件)。我有一个启用样式和一个禁用样式,残疾人样式基于启用样式。这是一种享受。我希望能够在点击按钮时改变样式(启用禁用,反之亦然),但经过一些搜索后,我所提供的代码无法正常工作。C#运行时更改WPF动态资源
这是在资源字典XAML
<!--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>
这是后面的代码将其更改为残疾人风格:
datepickerEDP.SetResourceReference(Control.StyleProperty, "appDatePickerDisabled");
和启用风格
datepickerEDP.SetResourceReference(StyleProperty, "appDatePicker");
运行此代码时出现的错误是
System.Windows.Markup.XamlParseException发生的HResult = -2146233087 LineNumber上= 0 LinePosition = 0消息= A 'DynamicResourceExtension' 不能被上 类型 '风格' 的 '支持算法FMP' 属性设置。 'DynamicResourceExtension'只能在DependencyObject的DependencyProperty上设置。
源= PresentationFramework堆栈跟踪: 在MS.Internal.Helper.CheckCanReceiveMarkupExtension(的MarkupExtension 的MarkupExtension,IServiceProvider的的ServiceProvider,DependencyObject的& targetDependencyObject,DependencyProperty的& targetDependencyProperty) 的InnerException:
这对我表明我不能使用基于样式,但即使我已将禁用的样式更改为包含已启用样式上的所有内容并删除了BasedOn标签,它仍然会失败。有没有人有任何想法,我错了?这是真正做一个人的螺母:(
使其成为静态资源'BasedOn =“{StaticResource appDatePicker}”'。 '已经覆盖基本设置,''DynamicResource'有不同的目的,它应该修复这个异常,但是另外一种方法,比如使用样式触发器,可能会更简单r –
ASh
因为这正是我所需要的,谢谢。 – BU00HA