我在更改控件上的動態資源樣式時存在問題(例如它是日期選擇器,但我想更改它以適用於很多不同的控件)。我有一個啓用樣式和一個禁用樣式,殘疾人樣式基於啓用樣式。這是一種享受。我希望能夠在點擊按鈕時改變樣式(啓用禁用,反之亦然),但經過一些搜索後,我所提供的代碼無法正常工作。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