次の方法で共有


XAML のジェネリック

System.Xaml で実装されている .NET XAML サービスは、ジェネリック CLR 型の使用をサポートします。 このサポートには、ジェネリックの制約を型引数として指定し、ジェネリック コレクション ケースに適した Add メソッドを呼び出して制約を適用する方法が含まれます。 このトピックでは、XAML でのジェネリック型の使用と参照の側面について説明します。

x:TypeArguments

x:TypeArguments は、XAML 言語によって定義されるディレクティブです。 ジェネリック型によってサポートされる XAML 型のメンバーとして使用される場合、x:TypeArguments はジェネリックの制約型引数をバッキング コンストラクターに渡します。 構文の例を含む、の .NET XAML サービスの使用に関連する参照構文については、「x:TypeArguments ディレクティブのを参照してください。

x:TypeArguments は文字列を受け取り、型コンバーターのバッキングがあるため、通常は属性として XAML 使用法で宣言されます。

XAML ノード ストリームでは、x:TypeArguments によって宣言された情報は、ノード ストリーム内の StartObject 位置にある XamlType.TypeArguments から取得できます。 XamlType.TypeArguments の戻り値は、XamlType 値の一覧です。 XAML 型がジェネリック型を表すかどうかを判断する場合は、XamlType.IsGenericを呼び出します。

XAML でのジェネリックの規則と構文規則

XAML では、ジェネリック型は常に制約付きジェネリックとして表される必要があります。 制約のないジェネリックは、XAML 型システムまたは XAML ノード ストリームには存在しません。また、XAML マークアップでは表現できません。 ジェネリックは、x:TypeArgumentsによって参照されているジェネリックの入れ子になった型制約である場合や、ジェネリック型の CLR 型参照 x:Type 提供する場合に、XAML 属性構文内で参照できます。 ジェネリックの参照は、.NET XAML Services によって定義された XamlTypeTypeConverter クラスを通じてサポートされます。

XamlTypeTypeConverter によって有効になっている XAML 属性構文フォームは、ジェネリックの型と制約に山かっこを使用する一般的な MSIL/CLR 構文規則を変更し、代わりに制約コンテナーのかっこを置き換えます。 例については、x:TypeArguments ディレクティブを参照してください。

ジェネリックと XAML 2009 の機能

CLR 基本型をマッピングして共通言語プリミティブの XAML 型を取得する代わりに XAML 2009 を使用する場合は、の情報項目として xaml 2009 組み込み型 使用できます。 たとえば、次のように宣言できます (プレフィックス マッピングは表示されませんが、x は XAML 2009 の XAML 言語 XAML 名前空間です)。

<my:BusinessObject x:TypeArguments="x:String,x:Int32"/>

WPF でのジェネリックのサポート

特に WPF を対象とする XAML 2006 の場合、x:Classx:TypeArgumentsと同じ要素に指定する必要があり、その要素は XAML ドキュメント内のルート要素である必要があります。 ルート要素は、少なくとも 1 つの型引数を持つジェネリック型にマップする必要があります。 たとえば、PageFunction<T>です。

ジェネリックの使用をサポートするために考えられる回避策としては、ジェネリック型を返すことができるカスタム マークアップ拡張機能の定義や、ジェネリック型から派生するが独自のクラス定義でジェネリック制約をフラット化するラップ クラス定義の提供などがあります。

WPF では、XAML 2009 の機能を x:TypeArgumentsと共に使用できますが、緩い XAML (マークアップ コンパイルされていない XAML) に対してのみ使用できます。 WPF 用のマークアップ コンパイル XAML と XAML の BAML 形式は、現在、XAML 2009 のキーワードと機能をサポートしていません。

Windows Workflow Foundation for .NET Framework 3.5 のカスタム ワークフローでは、一般的な XAML の使用はサポートされていません。

関連項目