x:Type 標記延伸
提供 CLR Type 物件,此物件是指定之 XAML 型別的基礎類型。
XAML 屬性使用方式
<object property="{x:Type prefix:typeNameValue}" .../>
XAML 物件專案使用方式
<x:Type TypeName="prefix:typeNameValue"/>
XAML 值
價值 | 描述 |
---|---|
prefix |
自選。 對應非預設 XAML 命名空間的前置詞。 通常不需要指定前置詞。 請參閱。 |
typeNameValue |
必填。 可解析為目前預設 XAML 命名空間的類型名稱;如果提供 prefix ,則為指定的對應前置詞。 |
言論
x:Type
標記延伸具有與 C# 中的 typeof()
運算符類似的函式,或 Microsoft Visual Basic 中的 GetType
運算符。
x:Type
標記延伸會針對採用類型 Type的屬性提供從字串轉換行為。 輸入是 XAML 類型。 輸入 XAML 類型和輸出 CLR Type 之間的關聯性在於,輸出 Type 是輸入 XamlType的 UnderlyingType,根據 XAML 架構內容和內容所提供的 IXamlTypeResolver 服務來查閱必要的 XamlType。
在 .NET XAML 服務中,這個標記延伸的處理是由 TypeExtension 類別所定義。
在特定架構實作中,以 Type 做為值的一些屬性可以直接接受類型的名稱(類型 Name
的字串值)。 不過,實作此行為是複雜的案例。 如需範例,請參閱後續的
屬性語法是與這個標記延伸搭配使用的最常見語法。 在 x:Type
識別符字串之後提供的字串令牌會指派為基礎 TypeExtension 擴充類別的 TypeName 值。 在以 CLR 類型為基礎的 .NET XAML 服務的預設 XAML 架構內容下,此屬性的值是所需類型的 Name,或包含前面有非預設 XAML 命名空間對應的前置詞 Name。
x:Type
標記延伸可用於物件專案語法。 在此情況下,需要指定 TypeName 屬性值,才能正確初始化延伸模組。
x:Type
標記延伸也可以當做詳細資訊屬性使用;不過,這項使用並不一般:<object property="{x:Type TypeName=typeNameValue}" .../>
WPF 使用方式注意事項
預設 XAML 命名空間和類型對應
WPF 程式設計的預設 XAML 命名空間包含一般 XAML 案例所需的大部分 XAML 類型;因此,在參考 XAML 類型值時,您通常可以避免前置詞。 如果您從自定義元件或 WPF 元件中存在的類型參考類型,但來自未對應至預設 XAML 命名空間的 CLR 命名空間,您可能需要對應前置詞。 如需前置詞、XAML 命名空間和對應 CLR 命名空間的詳細資訊,請參閱 WPF XAML 的 XAML 命名空間和命名空間對應。
支援 Typename-as-String 的類型屬性
WPF 支援技術,可讓您指定某些類型屬性的值 Type,而不需要使用 x:Type
標記延伸。 相反地,您可以將值指定為命名型別的字串。 其中範例為 ControlTemplate.TargetType 和 Style.TargetType。 不支援此行為,但無法透過類型轉換器或標記延伸來提供。 相反地,這是透過 FrameworkElementFactory實作的延遲行為。
Silverlight 支援類似的慣例。 事實上,Silverlight 目前不支援其 XAML 語言支援中的 {x:Type}
,而且在少數旨在 WPF-Silverlight 支援 XAML 移轉的情況下,不接受 {x:Type}
使用方式。 因此,typename-as-string 行為是內建至所有 Silverlight 原生屬性評估,其中 Type 是值。
XAML 2009
XAML 2009 提供泛型型別的額外支援,並修改 x:TypeArguments
和 x:Type
的功能行為,以提供此支援。
x:TypeArguments
泛型物件具現化的相關物件元素可以位於根以外的專案上。 如需詳細資訊,請參閱x:TypeArguments 指示詞 的一節。 XAML 2009 支援在標記中指定泛型類型條件約束的語法。 這可以由
x:TypeArguments
、x:Type
或兩個功能組合使用。處理 XAML 2009 以進行載入時,WPF XAML 實作也會將這項功能新增至某些使用類型 Type之架構屬性的隱含型別轉換行為。
在 WPF 中,您可以使用 XAML 2009 功能,但僅適用於鬆散的 XAML(未編譯標記的 XAML)。 WPF 和 BAML 形式的標記編譯 XAML 目前不支援 XAML 2009 關鍵詞和功能。