共用方式為


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 是輸入 XamlTypeUnderlyingType,根據 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.TargetTypeStyle.TargetType。 不支援此行為,但無法透過類型轉換器或標記延伸來提供。 相反地,這是透過 FrameworkElementFactory實作的延遲行為。

Silverlight 支援類似的慣例。 事實上,Silverlight 目前不支援其 XAML 語言支援中的 {x:Type},而且在少數旨在 WPF-Silverlight 支援 XAML 移轉的情況下,不接受 {x:Type} 使用方式。 因此,typename-as-string 行為是內建至所有 Silverlight 原生屬性評估,其中 Type 是值。

XAML 2009

XAML 2009 提供泛型型別的額外支援,並修改 x:TypeArgumentsx:Type 的功能行為,以提供此支援。

  • x:TypeArguments 泛型物件具現化的相關物件元素可以位於根以外的專案上。 如需詳細資訊,請參閱 x:TypeArguments 指示詞一節。

  • XAML 2009 支援在標記中指定泛型類型條件約束的語法。 這可以由 x:TypeArgumentsx:Type或兩個功能組合使用。

  • 處理 XAML 2009 以進行載入時,WPF XAML 實作也會將這項功能新增至某些使用類型 Type之架構屬性的隱含型別轉換行為。

在 WPF 中,您可以使用 XAML 2009 功能,但僅適用於鬆散的 XAML(未編譯標記的 XAML)。 WPF 和 BAML 形式的標記編譯 XAML 目前不支援 XAML 2009 關鍵詞和功能。

另請參閱