문제

스크립팅 언어로 사용할 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