Embedded Ironpython-Skripte und Umwandlung Typen
-
06-07-2019 - |
Frage
Ich habe eine WPF-Anwendung, die Ironpython als Skriptsprache verwenden einbettet. Ich habe ein Objektmodell bekam die Ironpython-Skripte ‚Zeug‘ zu tun, verwenden können.
Allerdings habe ich auf ein seltsames Problem kommen, dass ich in einer Art und Weise gelöst haben, die ich glaube nicht korrekt ist.
In meinem Skript möchte ich folgendes eingeben, um den Standort eines Objekts in WPF zu setzen.
map.CanvasLocation = 10,10
Dies kommt mit Ausnahme sagen, dass es nicht von PythonTuple zu System.Windows.Point umwandeln kann.
ich zur Zeit habe gelöst, dass ein benutzerdefinierten Typ-Wandler in meinem c # Objekt, aber ich bin mir nicht sicher, ob dies der beste Weg ist, es zu tun.
Gibt es eine Möglichkeit Ironpython oder .Net im Allgemeinen zu sagen, wie von einem Typ in einen anderen zu konvertieren, die während der Laufzeit verlängert werden kann?
Lösung
So wie ich dies tun, ist TypeDescriptor zu verwenden, um einen Typkonverter Attribut PythonTuple zur Laufzeit hinzuzufügen.
TypeDescriptor.AddAttributes(typeof(PythonTuple),
new TypeConverterAttribute(typeof(Converter)));
Dann habe ich den folgenden Code, den Konverter in dem Attribut Setter (SetMemberAfter Methode)
findenvar converter = TypeDescriptor.GetConverter(value);
if (converter.CanConvertTo(destinationType))
{
var destinationValue = converter.ConvertTo(value, destinationType);
return destinationValue;
}
else
{
throw new InvalidOperationException("Cannot convert from {0} to {1}".UIFormat(
value == null ? "null" : value.GetType().Name, destinationType.Name));
}
Andere Tipps
Warum nicht tun
map.CanvasLocation = Point(10,10)