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
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.
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.
- 1. Manuell spezifische lokalisierte Zeichenfolge erhalten
- 2. Analysieren SQL-Zeichenfolge
- 3. Zeichenfolge wie Befehlszeilenargumente analysieren
- 4. JS-Array in JSON-Zeichenfolge als Golang-Map analysieren
- 5. Eine Zeichenfolge in C++ analysieren
- 6. Konsoleneingabe-Java. Eine Zeichenfolge analysieren
- 7. XML-Zeichenfolge mit SAX analysieren
- 8. Eine einzelne CSV-Zeichenfolge analysieren?
- 9. Jsoup analysieren/craw bestimmte Zeichenfolge
- 10. Analysieren Sie eine Zeichenfolge, um Befehlszeilenargumente aus einer Zeichenfolge zu analysieren?
- 11. Regex leiden und eine Zeichenfolge richtig analysieren
- 12. Python analysieren Datumsformat, Teile der Zeichenfolge ignorieren
- 13. kann nicht Zeichenfolge analysieren, um Integer-Wert
- 14. Analysieren einer JSON-formatierten Zeichenfolge in Pig
- 15. Haskell - Analysieren bestimmter Muster aus einer Zeichenfolge
- 16. Einfache JSON-Zeichenfolge im Stapel analysieren
- 17. Wie kann ich diese JSON-Zeichenfolge analysieren?
- 18. CSV in Powershell aus einer Zeichenfolge analysieren?
- 19. JavaScript eine Zeichenfolge zu Objekt analysieren
- 20. Anfordern von Hilfe zum Analysieren einer Zeichenfolge
- 21. Parsing lange Zeichenfolge als Datetime
- 22. Eine Zeichenfolge manuell für DrawString() -Methode in C#
- 23. wie die folgende Zeichenfolge analysieren in PHP JSon
- 24. Split String und analysieren dann als Dezimalzahl
- 25. Kann nicht analysieren curl Antwort als json
- 26. XML als PHP mit web.config analysieren
- 27. AIML - Benutzereingaben als Variable nach Python analysieren
- 28. Zeichenfolge wurde nicht als gültige DateTime erkannt
- 29. Zeichenfolge wurde nicht als gültige DateTime erkannt?
- 30. Schwerwiegender Fehler: Kann Zeichenfolgenoffset nicht als Array verwenden - Zeichenfolge aus JSON-Antwort analysieren
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