Ich habe ein Problem mit dem Ändern der dynamischen Ressource Stil auf einem Steuerelement (in dem Beispiel ist es ein Datepicker, aber ich möchte es für viele verschiedene Steuerelemente ändern). Ich habe einen Stil für aktiviert und einen für deaktiviert und der deaktivierte Stil basiert auf dem aktivierten. Das funktioniert ein Vergnügen. Ich möchte in der Lage sein, den Stil zu ändern, wenn ich auf eine Schaltfläche klicke (aktiviert zu deaktiviert und umgekehrt), aber nach einigem Suchen funktioniert der Code, den ich mir ausgedacht habe, einfach nicht. C# Laufzeit ändern WPF dynamische Ressource
Dies ist die XAML im Ressourcenverzeichnis
<!--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>
Dies ist der Code-behind ist es für Behinderte Stil zu ändern:
datepickerEDP.SetResourceReference(Control.StyleProperty, "appDatePickerDisabled");
und für den aktivierten Stil
datepickerEDP.SetResourceReference(StyleProperty, "appDatePicker");
Der Fehler, den ich beim Ausführen dieses Codes erhalte, ist
System.Windows.Markup.XamlParseException aufgetreten HResult = -2146233087 Linenumber = 0 = 0 Lineposition Nachricht = A 'DynamicResourceExtension' kann nicht auf der 'BasedOn' Eigenschaft Typ 'Style' gesetzt werden. Eine 'DynamicResourceExtension' kann nur für eine DependencyProperty eines DependencyObject festgelegt werden.
Source = PresentationFramework Stacktrace: bei MS.Internal.Helper.CheckCanReceiveMarkupExtension (Markupextension Markupextension, IServiceProvider serviceprovider, DependencyObject & targetDependencyObject, DependencyProperty & targetDependencyProperty) Innerexception:
mir Dies zeigt an, dass ich Ich kann keinen Basiston-Stil verwenden, aber selbst wenn ich den deaktivierten Stil so geändert habe, dass er alle Elemente des aktivierten Stils enthält und das BasedOn-Tag entfernt hat, schlägt er immer noch fehl. Hat jemand irgendwelche Ideen, wo ich falsch liege? Dies tut man der Mutter wirklich in :(
es statische Ressource machen 'BasedOn = "{Static appDatePicker}"'. ' 'bereits überschreibt Grundeinstellungen , 'DynamicResource' hat einen anderen Zweck: Es sollte die Ausnahme beheben, aber vielleicht ist ein anderer Ansatz wie die Verwendung von Style-Triggern sogar einfach r –
ASh
ASh das tut genau das, was ich brauche, danke. – BU00HA