Ich versuche, meine Anwendung anpassbarer zu machen, indem Benutzer eine Farbe aus einem Farbauswahldialog auswählen und dann den Stil der Anwendung in Echtzeit ändern können (mit DynamicResource
)WPF: Ändern von Ressourcen (Farben) aus der App.xaml zur Laufzeit
Wie gehe ich beim Ändern bestimmter Ressourcen, die sich in der app.xaml
befinden?
Ich habe so etwas wie dies aber kein Glück (nur ein Test) versucht:
var colorDialog = new CustomControls.ColorPickerDialog();
var dResult = colorDialog.ShowDialog();
var x = Application.Current.Resources.Values.OfType<LinearGradientBrush>().First();
x = new LinearGradientBrush();
x.GradientStops.Add(new GradientStop(colorDialog.SelectedColor,1));
Dies ist ein Auszug aus der app.xaml
Datei:
<Application.Resources>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" x:Key="HeaderBackground">
<GradientStop Color="#82cb02" Offset="1"/>
<GradientStop Color="#82cb01" Offset="0.2"/>
<GradientStop Color="#629a01" Offset="0.5"/>
</LinearGradientBrush>
Was ist der beste Möglichkeit, diese Form der Anpassbarkeit (im Grunde nur einige Farben ändern) zu einer Anwendung zu ermöglichen?
[Update]
Ich habe gerade this answer aus einer früheren Frage, die gestellt wurde, und es versucht, aber ich bin immer die gleiche InvalidOperationException Ausnahme Petoj für die gegebene in den Kommentaren erwähnt Antworten. Hier ist der Beispielcode aus der Antwort:
XAML:
<LinearGradientBrush x:Key="MainBrush" StartPoint="0, 0.5" EndPoint="1, 0.5" >
<GradientBrush.GradientStops>
<GradientStop Color="Blue" Offset="0" />
<GradientStop Color="Black" Offset="1" />
</GradientBrush.GradientStops>
</LinearGradientBrush>
C#:
LinearGradientBrush myBrush = FindResource("MainBrush") as LinearGradientBrush;
myBrush.GradientStops[0].Color = Colors.Red;
Aber ich kann es nicht in einem Fenster hinzufügen, da dieser Stil für jedes Fenster in meinem Projekt gilt –