2009-07-31 53 views
1

我有一个嵌入IronPython作为脚本语言使用的WPF应用程序。我有一个IronPython脚本可以用来做'东西'的对象模型。嵌入式IronPython脚本和转换类型

但是我遇到了一个奇怪的问题,我以一种我不相信是正确的方式解决了。

在我的脚本中,我想输入以下内容来设置WPF中对象的位置。

map.CanvasLocation = 10,10 

这出现了一个异常,说它无法从PythonTuple转换到System.Windows.Point。

我目前已经解决了在我的c#对象中使用自定义类型转换器,但我不确定这是否是最好的方法。

有没有办法告诉IronPython或.Net一般如何从一种类型转换为另一种类型,可以在运行时扩展?

回答

2

我这样做是使用TypeDescriptor的类型转换器属性在运行时添加到PythonTuple的方式。

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

然后我用下面的代码来查找属性的setter(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)); 
} 
0

为什么不做一个

map.CanvasLocation = Point(10,10) 
+0

我能做到。这会工作,但它也不是非常用户友好。我想让脚本尽可能地容易使用。 – 2009-07-31 09:23:13