2011-08-30 99 views
3

以下TargetType規範有何區別?風格TargetType屬性問題

1.

<Style TargetType="{x:Type Button}" ... 

2.

<Style TargetType="Button" ... 

看來都工作正常。

+0

可能重複(HTTP://計算器。com/questions/1085730/target-type-controltype-and-targettype-xtype-controltype) – CodeNaked

+0

對不起,我搜索了一個答案,但什麼也沒找到 – vkrzv

回答

3

在第一個示例中,Type標記擴展創建由給定字符串指定的Type的實例,即Button

在第二個示例中,與TargetType屬性關聯的類型轉換器將字符串"Button"轉換爲所需的Type

兩者給出完全相同的結果。值得注意的是,在Silverlight中,Type標記擴展不存在,所以(2)只有可能。

1

對不起,這樣的舊線程戳,但我覺得這是值得的。我最近遇到的情況表明x:Type不同於TypeName-as-String。從我的經驗 -

X:類型認爲強名稱或組件的版本,但不類型名,爲字符串

我在這裏我的博客中解釋了我的情況和其他細節 -

http://weblogs.asp.net/akjoshi/archive/2012/02/03/importance-of-specifying-ancestortype-with-x-type-in-relativesourcebinding.aspx

從這個

除此之外,也有在WPF如何推斷類型差異。對於x:類型使用TypeExtension,而對於TypeName-as-String使用FrameworkElementFactory。

作爲每MSDN - 支持

類型屬性類型名-作爲字符串

WPF支持,使指定的類型類型的一些 屬性的值的技術,而不需要的x:類型標記擴展 用法。相反,您可以將該值指定爲名稱爲 類型的字符串。這個例子是ControlTemplate.TargetType和Style.TargetType。不支持通過 類型轉換器或標記擴展提供此行爲的支持。相反,這是通過FrameworkElementFactory實現的 延期行爲。 [TargetType的=的TargetType = 「controlType」 之間的區別和 「{X:類型controlType}」]的

http://msdn.microsoft.com/en-us/library/ms753322.aspx