質問

IronPythonを組み込んでスクリプト言語として使用するWPFアプリケーションがあります。 IronPythonスクリプトが「もの」を実行するために使用できるオブジェクトモデルがあります。

しかし、正しいとは思わない方法で解決した奇妙な問題に遭遇しました。

私のスクリプトでは、WPFでオブジェクトの場所を設定するために次を入力します。

map.CanvasLocation = 10,10

これにより、PythonTupleからSystem.Windows.Pointに変換できないという例外が発生します。

現在、c#オブジェクトでカスタムタイプコンバーターを使用することを解決しましたが、これが最善の方法であるかどうかはわかりません。

IronPythonまたは.Netに、実行時に拡張可能なあるタイプから別のタイプに変換する方法を一般的に伝える方法はありますか?

役に立ちましたか?

解決

これを行う方法は、TypeDescriptorを使用して、実行時にPythonTupleに型コンバーター属性を追加することです。

TypeDescriptor.AddAttributes(typeof(PythonTuple), 
    new TypeConverterAttribute(typeof(Converter)));

次に、次のコードを使用して、属性セッター(SetMemberAfterメソッド)でコンバーターを見つけます

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));
}

他のヒント

やらないでください

map.CanvasLocation = Point(10,10)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top