당신은 TypeConverters
이 TypeConverter에서 상속 제네릭 형식 컨버터가 있습니다 사용하고 기본 동작을 제공 할 수있는 가장 유용한 중 하나는 클래스 인스턴스를 확장하는 데 사용할 수있는, ExpandableObjectConverter입니다.
namespace Microsoft.Xna.Framework
{
#if WINDOWS
public class Point3Converter: System.ComponentModel.ExpandableObjectConverter
{
public override bool CanConvertFrom(System.ComponentModel.ITypeDescriptorContext context, Type sourceType)
{
return sourceType == typeof(string);
}
public override object ConvertFrom(System.ComponentModel.ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
try
{
string[] tokens = ((string) value).Split(';');
return new Point3(int.Parse(tokens[0]), int.Parse(tokens[1]), int.Parse(tokens[2]));
}
catch
{
return context.PropertyDescriptor.GetValue(context.Instance);
}
}
public override object ConvertTo(System.ComponentModel.ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
{
Point3 p = (Point3) value;
return p.X +";"+ p.Y+";" + p.Z;
}
}
[System.ComponentModel.TypeConverter(typeof(Point3Converter))]
#endif
public struct Point3
{
public int X,Y,Z;
public static readonly Point3 UnitX = new Point3(1, 0, 0);
public static readonly Point3 UnitY = new Point3(0, 1, 0);
public static readonly Point3 UnitZ = new Point3(0, 0, 1);
public Point3(int X, int Y, int Z)
{
this.X = X;
this.Y = Y;
this.Z = Z;
}
public static Vector3 operator +(Point3 A, Vector3 B)
{
return new Vector3(A.X + B.X, A.Y + B.Y, A.Z + B.Z);
}
public static Point3 operator +(Point3 A, Point3 B)
{
return new Point3(A.X + B.X, A.Y + B.Y, A.Z + B.Z);
}
public static Point3 operator -(Point3 A, Point3 B)
{
return new Point3(A.X - B.X, A.Y - B.Y, A.Z - B.Z);
}
public static Point3 operator -(Point3 A)
{
return new Point3(-A.X, -A.Y, -A.Z);
}
public override string ToString()
{
return X+";"+Y+";"+Z;
}
}
}
"기본 데이터 유형"작품에 클래스가이 필요하지 않기 때문에 :
이
내 POINT3 구조 및 사용자 정의 형식 변환기의 예입니다. 유형을 변환 할 필요없이 (XNA Framework에서) Vector3/Point가있는 클래스를 쉽게 추가 할 수 있습니다. 그러나 다른 사람들과 유사한 유형 인 Texture2D -> Image의 경우, 나는 그것을 위해 몇 가지 예를 원합니다. – Deukalion그래서 PropertyGrid는 Vector3와 Point 등을 처리합니다. 아무 것도 사용자 정의 할 필요가 없습니다. – Deukalion
사용자 정의 데이터 유형에 대해 묻는 것은 propertygrid가 처리하는 방법입니다 ... 원하는 작업의 예에 대해 더 구체적으로 설명하면 멋질 것입니다. – Blau