Wahrscheinlich eine einfache Frage aber:
Wie programmiere ich programmgesteuert die Farbe einer Ellipse, die in XAML basierend auf einer Variablen definiert ist?
Alles, was ich beim Binden gelesen habe, basiert auf Sammlungen und Listen - kann ich es nicht einfach (und wörtlich) basierend auf dem Wert einer String-Variablen setzen? string color="red" color="# FF0000"
Es lohnt sich, darauf hinzuweisen, dass der Konverter, auf den die anderen Beiträge verweisen bereits existiert , weshalb Sie <Ellipse Fill="red">
in xaml überhaupt erst machen können. Der Konverter ist System.Windows.Media.BrushConverter
:
Der effizientere Weg besteht darin, die vollständige Syntax zu verwenden:
%Vor%BEARBEITEN als Antwort auf -1 und Kommentare:
Der obige Code funktioniert perfekt im Code , worum es in der ursprünglichen Frage ging. Sie wollen auch nicht ein IValueConverter
- diese werden normalerweise für bindende -Szenarios verwendet. A TypeConverter
ist hier die richtige Lösung (weil Sie eine Zeichenfolge in eine Bürste umwandeln). Weitere Informationen finden Sie in diesem Artikel .
Weiter bearbeiten (nachdem Sie den Kommentar der Aviad gelesen haben): Sie müssen nicht unbedingt%%%%% in Xaml verwenden - es wird für Sie verwendet. Wenn ich dies in Xaml schreibe:
%Vor% ... dann verwendet die Laufzeit automatisch ein TypeConverter
, um das Zeichenfolgenliteral in einen Pinsel zu verwandeln. Das Xaml wird im Wesentlichen in das Äquivalent longhand konvertiert:
Sie haben also Recht - Sie können es nicht in Xaml verwenden - aber Sie müssen nicht.
Auch wenn Sie einen Zeichenfolgenwert hatten, den Sie binden als Füllung einfügen wollten, müssen Sie den Konverter nicht manuell angeben. Dieser Test von Kaxaml:
%Vor% Seltsamerweise können Sie nicht einfach BrushConverter
verwenden und haben immer noch diese Arbeit - aber mit der Bindung und verwendet automatisch die StaticResource col
, um die Zeichenfolge in einen Pinsel zu verwandeln.
verwenden
%Vor%Wenn der 'Name' Ihrer Ellipse in Ihrem XAML "my_ellipse" ist, in deinem Code etwa so:
%Vor%oder das:
%Vor%