2009-07-31 2 views
3

Wie konvertiert der XAML-Parser die Zeichenfolge "Rot" in Foreground = "Rot" in einen SolidColorBrush? Obwohl ich weiß, dass die Typen System.ComponentModel.TypeConverter definiert haben, bin ich der Meinung, dass der WPF-XAML-Parser diese immer verwendet, um die Zeichenfolge in den Pinsel zu konvertieren. Gibt es XAML-APIs abgesehen von XamlReader.Load (das eine gültige XML-Zeichenfolge benötigt), die ich zum Analysieren einer einzelnen Zeichenfolge verwenden könnte, als ob sie eine Eigenschaft für eine bestimmte Eigenschaft wäre?Zeichenfolge manuell als XAML-Attribut analysieren

Antwort

-1

Ich glaube, dass Sie selbst davon profitieren können. XamlReader kennt den Zieltyp (den Typ der Eigenschaft, auf die der String angewendet werden soll). Sie würden einen TypeConverter für den Typ dieser Eigenschaft registrieren.

EDIT dies für Sie arbeiten, wenn es um SolidColorBrush kommt:

var colorString = ...; 
var converter = new System.Windows.Media.BrushConverter(); 
var brush = (SolidColorBrush)converter.ConvertFromString(colorString); 

bei SolidColorBrush Blick in .NET Reflector, es scheint die Magie, die Typen Deserialisierung innerhalb XamlReader verwendet interne APIs um bekannt macht. Ich bin nicht sicher, ob Sie Ihre eigenen Typen registrieren können, um damit umzugehen.

+0

Ja, so mache ich es derzeit. Aber ich habe bemerkt, dass der XamlReader nicht immer die TypeConverter benutzt, um die Zeichenkette zu analysieren. Daher muss der XamlReader neben den Typkonvertern auch mehr Logik zum Parsen haben. Meine Frage ist das irgendwo als APIs? – bitbonk

0

Der XAML-Parser (für WPF) verwendet tatsächlich den Typkonverter der angegebenen Eigenschaft oder des angegebenen Eigenschaftstyps. Es gibt ein paar hartcodierte Abkürzungen, aber sie sind für die Leistung und ändern die Semantik nicht. Ein Parser, der nur Attributinformationen verwendet, kann die Parser-Semantik duplizieren (was beispielsweise Blend und Cider tun).

Es gibt keine API, die einen Wert genau wie XAML konvertiert, hauptsächlich weil viele Typkonvertierungen nur im Kontext eines XAML-Parsers funktionieren. Beispielsweise können Typkonverter auf Namespaces verweisen, die in der XAML-Datei definiert sind (die sich je nachdem ändert, wo sich der Wert in der XML-Datei befindet) sowie auf andere Ambient Information Base-URI-Basis für die Datei. Diese sind nur wirklich anwendbar, wenn die XAML-Datei analysiert wird.

Am nächsten kommt die Frage nach dem Eigenschaftsdeskriptor für die Eigenschaft aus dem Typdeskriptor und der Verwendung der Converter-Eigenschaft. Dadurch werden die entsprechenden Attribute gescannt, um den korrekten Typkonverter zu erstellen.

Verwandte Themen