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?

War es hilfreich?

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)

finden
var 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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top