2009-07-31 34 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