Es ist erwähnenswert, dass der Wandler die anderen Beiträge bereits Referenz existiert, weshalb Sie tun können <Ellipse Fill="red">
in Xaml an erster Stelle. Der Konverter ist System.Windows.Media.BrushConverter
:
BrushConverter bc = new BrushConverter();
Brush brush = (Brush) bc.ConvertFrom("Red");
Je effizienter Weg, um die vollständige Syntax verwenden:
myEllipse.Fill = new SolidColorBrush(Colors.Red);
EDIT in Reaktion auf -1 und Kommentare:
Der obige Code funktioniert perfekt fein in Code, worum sich die ursprüngliche Frage handelte. Sie auch nicht wollen ein IValueConverter
- diese werden typischerweise für bindende Szenarien verwendet. A TypeConverter
ist hier die richtige Lösung (da Sie eine Zeichenfolge in eine Bürste konvertieren). Einzelheiten finden Sie unter this article.
Weitere bearbeiten (nach Aviad Kommentar nachzulesen): Sie müssen nicht explizit die TypeConverter
in XAML verwenden - es für Sie verwendet wird. Wenn ich schreibe dies in XAML:
<Ellipse Fill="red">
... verwendet dann die Laufzeit automatisch eine BrushConverter
die Stringliteral in eine Bürste zu drehen. Das XAML im Wesentlichen in die äquivalente Langschrift umgewandelt wird:
<Ellipse>
<Ellipse.Fill>
<SolidColorBrush Color="#FFFF0000" />
</Ellipse.Fill>
</Ellipse>
So haben Sie recht - man kann es nicht in XAML verwenden - aber Sie nicht brauchen.
Auch wenn Sie einen Zeichenfolgenwert hatten, den Sie als die Füllung binden möchten, müssen Sie den Konverter manuell nicht angeben. Dieser Test von Kaxaml:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:System;assembly=mscorlib">
<Page.Resources>
<s:String x:Key="col">Red</s:String>
</Page.Resources>
<StackPanel>
<Ellipse Width="20" Height="20" Fill="{Binding Source={StaticResource col}}" />
</StackPanel>
</Page>
Merkwürdigerweise können Sie nicht nur die StaticResource col
verwenden und immer noch diese Arbeit haben - aber mit ihm die Bindung und verwendet automatisch die ValueConverter
die Zeichenfolge in eine Bürste zu drehen.
Dies wäre korrekt, wenn Sie anstelle eines 'Color'-Objekts in ein' Brush'-Objekt konvertieren würden. Einfach einen 'BrushConverter' anstelle eines' ColorConverter' zu verwenden sollte den Trick machen. Obwohl ich denke, dass Sie eine Instanz dieses Konverters benötigen, ist die 'ConvertFromString'-Methode nicht statisch, oder? –
Wenn Sie mit einer Farbe binden, können Sie auch die Colors-Klasse verwenden, die ebenfalls über Intellisense für die Farbnamen verfügt. –
Diese Konverter * existieren bereits * .... –