WPF Bindung, um die Füllfarbe der Ellipse zu ändern

7

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"

    
user294382 16.03.2010, 00:04
quelle

3 Antworten

16

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 :

%Vor%

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:

%Vor%

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.

    
Dan Puzey 16.03.2010 23:32
quelle
6

Was Sie tun müssen, ist einen benutzerdefinierten Konverter zu implementieren, um die Farbe in das Pinselobjekt zu konvertieren. So etwas ...

%Vor%

Und geben Sie dann den Konverter in Ihrer Bindung an

%Vor%     
Leigh S 16.03.2010 00:13
quelle
1

verwenden

%Vor%

Wenn der 'Name' Ihrer Ellipse in Ihrem XAML "my_ellipse" ist, in deinem Code etwa so:

%Vor%

oder das:

%Vor%     
Alex Stoliar 18.05.2017 12:31
quelle

Tags und Links