Dot-Net
何時使用 {x:Type …}?
有什麼區別:
<Style TargetType="{x:Type Border}">和:
<Style TargetType="Border">何時以及為什麼需要使用
{x:Type …}?
效果上沒有區別;在這兩種情況下,TargetType 屬性都將設置為
typeof(Border)在 WPF 的第一個版本
{x:Type Border}中需要第一個版本,因為編譯器沒有使用TypeConverter該類將字元串轉換為 Type 對象,您需要指定TypeExtension該類來為您執行此操作。如果我沒記錯的話,第二個版本是用 Silverlight 引入的,並很快找到了 WPF 編譯器。
編輯
我對
TypeConverter班級的假設是錯誤的;這是由以下實現的FrameworkElementFactory:從文件中:
支持 Typename-as-String 的類型屬性
WPF 支持無需使用 x:Type 標記擴展即可指定類型 Type 的某些屬性的值的技術。相反,您可以將值指定為命名類型的字元串。這方面的範例是 ControlTemplate.TargetType 和 Style.TargetType。不通過類型轉換器或標記擴展提供對這種行為的支持。相反,這是通過 FrameworkElementFactory 實現的延遲行為。
Silverlight 支持類似的約定。事實上,Silverlight 目前在其 XAML 語言支持中不支持 {x:Type},並且在旨在支持 WPF-Silverlight XAML 遷移的少數情況之外不接受 {x:Type} 用法。因此,typename-as-string 行為內置於所有以 Type 為值的 Silverlight 本機屬性評估。