在「Deedy.Testing」中添加TypeConverter示例
This commit is contained in:
@@ -157,7 +157,7 @@ namespace Deedy.Activity.Helpers
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="geometryString">矢量图形的字符串表示形式</param>
|
/// <param name="geometryString">矢量图形的字符串表示形式</param>
|
||||||
/// <returns>如果解析成功则返回「Geometry」对象</returns>
|
/// <returns>如果解析成功则返回「Geometry」对象</returns>
|
||||||
public static Geometry? Help_ParseAsGeometry(this string geometryString) => TypeDescriptor.GetConverter(typeof(Geometry)).ConvertFromString(geometryString) as Geometry;
|
public static PathGeometry? Help_ParseAsPathGeometry(this string geometryString) => TypeDescriptor.GetConverter(typeof(PathGeometry)).ConvertFromString(geometryString) as PathGeometry;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 以图形中心点为中心沿顺时针旋转指定角度;再对一个矢量图形进行连续的「缩放」、「平移」到一个「Rectangle」
|
/// 以图形中心点为中心沿顺时针旋转指定角度;再对一个矢量图形进行连续的「缩放」、「平移」到一个「Rectangle」
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
41
DeedyDesigner/Deedy.Testing/CustomTypeConverter.cs
Normal file
41
DeedyDesigner/Deedy.Testing/CustomTypeConverter.cs
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
|
||||||
|
using System;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
using System.Globalization;
|
||||||
|
|
||||||
|
[TypeConverter(typeof(PointConverter))]
|
||||||
|
public struct Point
|
||||||
|
{
|
||||||
|
public double X { get; set; }
|
||||||
|
public double Y { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class PointConverter : TypeConverter
|
||||||
|
{
|
||||||
|
public override bool CanConvertFrom(ITypeDescriptorContext? context, Type sourceType)
|
||||||
|
=> sourceType == typeof(string);
|
||||||
|
|
||||||
|
public override object? ConvertFrom(ITypeDescriptorContext? context, CultureInfo? culture, object value)
|
||||||
|
{
|
||||||
|
var str = value as string;
|
||||||
|
if (string.IsNullOrEmpty(str)) return null;
|
||||||
|
|
||||||
|
var parts = str.Split(',');
|
||||||
|
return new Point
|
||||||
|
{
|
||||||
|
X = double.Parse(parts[0]),
|
||||||
|
Y = double.Parse(parts[1])
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool CanConvertTo(ITypeDescriptorContext? context, [NotNullWhen(true)] Type? destinationType)
|
||||||
|
=> destinationType == typeof(string);
|
||||||
|
|
||||||
|
public override object? ConvertTo(ITypeDescriptorContext? context, CultureInfo? culture, object? value, Type destinationType)
|
||||||
|
{
|
||||||
|
if (value == null) return "";
|
||||||
|
var point = (Point)value;
|
||||||
|
return $"{point.X},{point.Y}";
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user