XAML 中的泛型
System.Xaml 中實作的 .NET XAML 服務提供使用泛型 CLR 類型的支援。 這項支援包括針對泛型集合案例呼叫適當的 Add
方法,將泛型的條件約束指定為類型自變數,並強制執行條件約束。 本主題描述在 XAML 中使用和參考泛型型別的各個層面。
x:TypeArguments
x:TypeArguments
是由 XAML 語言定義的指示詞。 當它作為泛型型別所支援的 XAML 類型成員時,x:TypeArguments
將泛型的限制型別自變數傳遞給支援建構函式。 如需 .NET XAML 服務使用 x:TypeArguments
的參考語法,其中包含語法範例,請參閱 x:TypeArguments 指示詞。
因為 x:TypeArguments
接受字串,而且具有型別轉換器備份,所以通常會在 XAML 使用方式中宣告為屬性。
在 XAML 節點數據流中,x:TypeArguments
所宣告的資訊可以從節點數據流中 StartObject
位置的 XamlType.TypeArguments 取得。
XamlType.TypeArguments 的傳回值是 XamlType 值的清單。 呼叫 XamlType.IsGeneric,判斷 XAML 類型是否代表泛型型別。
XAML 中泛型的規則和語法慣例
在 XAML 中,泛型型別必須一律以限制泛型表示。 未受限制的泛型絕不會出現在 XAML 類型系統或 XAML 節點數據流中,而且無法在 XAML 標記中表示。 泛型可以在 XAML 屬性語法中參考,適用於 x:TypeArguments
所參考之泛型的巢狀型別條件約束,或針對 x:Type
提供泛型型別的 CLR 型別參考的情況。 透過 .NET XAML 服務所定義的 XamlTypeTypeConverter 類別支持參考泛型。
XamlTypeTypeConverter 啟用的 XAML 屬性語法會改變使用泛型類型和條件約束的角括弧的一般 MSIL / CLR 語法慣例,並改為取代條件約束容器的括號。 如需範例,請參閱 x:TypeArguments 指示詞。
泛型和 XAML 2009 功能
如果您使用 XAML 2009,而不是對應 CLR 基底類型來取得通用語言基本類型的 XAML 類型,您可以使用 XAML 2009 內建類型 做為 x:TypeArguments
中的資訊專案。 例如,您可以宣告下列專案(未顯示前置詞對應,但 x
是 XAML 2009 的 XAML 語言 XAML 命名空間):
<my:BusinessObject x:TypeArguments="x:String,x:Int32"/>
WPF 中的泛型支援
針對特別以 WPF 為目標的 XAML 2006 使用方式,x:Class 也必須在與 x:TypeArguments
相同的元素上提供,而且該元素必須是 XAML 檔中的根元素。 根元素必須對應至至少有一個類型自變數的泛型型別。 例如 PageFunction<T>。
支援泛型用法的可能因應措施包括定義可傳回泛型型別的自定義標記延伸,或提供衍生自泛型型別的包裝類別定義,但會將泛型條件約束壓平在其本身的類別定義中。
在 WPF 中,您可以使用 XAML 2009 功能搭配 x:TypeArguments
,但僅適用於鬆散的 XAML(不是標記編譯的 XAML)。 WPF 和 BAML 形式的標記編譯 XAML 目前不支援 XAML 2009 關鍵詞和功能。
適用於 .NET Framework 3.5 的 Windows Workflow Foundation 中的自定義工作流程不支援一般 XAML 使用方式。