2011-07-05 25 views

回答

6

類型轉換器用於一種類型的隱式轉換到另一個的區別類型轉換器和標記擴展之間的區別。例如,BrushConverter可以將字符串「紅色」轉換爲其Color屬性設置爲紅色的SolidColorBrush。正如在這種情況下:

<Button Background="Red" /> 

MarkupExtension允許您爲屬性提供更多自定義值。還有一些特殊的標記擴展,Binding,MultiBinding和DynamicResource。這些不僅僅提供靜態值,而是提供更多動態值。

因此,您可以構建標記擴展來執行與類型轉換器相同的操作,但您必須明確地使用它們,而不是類型轉換器的隱含特性。

1

A TypeConverter旨在將一種類型轉換爲另一種類型。有幾個提供的開箱即用,如BrushConverter,ColorConverter,BooleanConverter等等。請參閱here獲取完整列表。什麼是偉大的關於類型轉換器是,他們可以通過在類定義使用以下atttribute定義適用於屬性定義...

[TypeConverterAttribute(typeof(BrushConverter)] 
public Brush Background 
{ 
    ... 
} 

...的BrushConverter實施知道,如果它接收一個字符串作爲輸入它應該嘗試並將其轉換爲已知顏色的SolidBrush實例。這意味着,你的XAML並不需要分配一個實際SolidBrushes.Red參考屬性,而是使用一個簡單的字符串...

<Button Background="Red" /> 

...這是更快編寫和理解。然而,TypeConverter是ALWAYS調用屬性分配,並且您不能阻止XAML導致TypeConverter被調用。

A MarkupExtension用於返回一個對象,然後將該對象分配給指定的屬性。這更加靈活,因爲您可以決定何時何地使用MarkupExtension,並且不會將其限制爲事先用屬性標記的特定屬性。標記extesions的例子是綁定,StaticResource和DynamicResource。

因此,類型轉換器非常適合特定類型的特定屬性,您希望接受比類型本身定義的更大範圍的值。標記擴展非常適合開發人員決定何時何地使用它的更一般用途