所謂TypeConverter就是類型轉換器,支持兩種類型之間相互轉換
你可以重寫轉換邏輯,只要你清楚轉換的協議,就可以實現類型互轉。
定義一個Person類型,具有一個int類型的Age屬性:
public class Person { public int Age { get; set; } }
在XAML中添加一個Person的資源:
<Window.Resources> <local:Person x:Key="person"></local:Person> </Window.Resources>
本來可以像這樣初始化一個Person對象:
<Window.Resources> <local:Person x:Key="person" Age="123"></local:Person> </Window.Resources>
但是現在由於要引入TypeConverter,假設我想像下面這樣初始化Person對象怎么辦:
<Window.Resources> <local:Person x:Key="person">123</local:Person> </Window.Resources>
這就要用到TypeConverter,首先我們定義自己的Converter,繼承自TypeConverter,然后重寫TypeConverter的轉換邏輯:
public class StringToPersonConverter:TypeConverter { /// <summary> /// 從String轉換為Person /// </summary> /// <param name="context"></param> /// <param name="culture"></param> /// <param name="value"></param> /// <returns></returns> public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) { int age; if (int.TryParse(value.ToString(), out age)) { return new Person { Age = age }; } return null; } }
然后給Person類加上TypeConverter特性,讓編譯器知道當無法通過正常的方式初始化Person時,可以找StringToPersonConverter尋求幫助:
[TypeConverter(typeof(StringToPersonConverter))] public class Person { public int Age { get; set; } }
