WPF的流行,或者說是XAML的流行已經不可阻擋了。所以學習一些WPF的知識是非常有必要的。
關於TypeConverter,其實是一個將XAML屬性值(string字符串)轉換為對象的轉換器。
要實現這個轉換器,需要我們首先定義一個繼承自TypeConverter類的轉換類。
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) { if (value is string) { Human human = new Human(); human.Name = value.ToString(); return human; } return base.ConvertFrom(context, culture, value); } }
這個類是將一個XAML屬性值轉換為程序中的Human對象,Human的定義如下:
public class Human { public string Name { get; set; } public Human Child { get; set; } }
當定義好轉換器以后,我們還需要通過為Human添加特性的形式將轉換器和被轉換的類關聯起來,修改后的Human代碼如下(改動的地方已標紅):
[TypeConverter(typeof(StringToHumanTypeConverter))] public class Human { public string Name { get; set; } public Human Child { get; set; } }
通過這樣定義以后,我們可以直接在XAML中為Human附加字符串值。
<Window.Resources> <local:Human x:Key="human" Name="Tom" Child="ABC"></local:Human> </Window.Resources>
注意:關於local前綴,直接寫上去是會出錯的。需要在Window中定義:xmlns:local="clr-namespace:SampleTypeConverter"
我們在程序中可以通過查找資源來找到human對象,並訪問其Child屬性:
Human human = (Human)this.FindResource("human"); MessageBox.Show(human.Child.Name);
以上代碼參考自《深入淺出WPF》,僅作學習筆記。