x:TypeArguments ディレクティブ

ジェネリックの制約型引数をジェネリック型のコンストラクターに渡します。

XAML 属性の使用方法

<object x:TypeArguments="typeString" .../>

XAML 値

説明
object バックに CLR ジェネリック型がある XAML 型のオブジェクト要素宣言。 既定の XAML 名前空間のものではない XAML 型を object で参照する場合は、object が存在する XAML 名前空間を示すプレフィックスを object で指定する必要があります。
typeString 1 つ以上の XAML 型の名前が文字列として宣言されている文字列。CLR のジェネリック型の型引数を提供します。 構文に関するその他の注意事項については、「解説」を参照してください。

Remarks

ほとんどの場合、typeString の文字列で情報項目として使用される XAML 型にはプレフィックスが付きます。 CLR ジェネリック制約の一般的な型 (Int32String など) は、CLR の基底クラス ライブラリに収められています。 それらのライブラリは、一般的なフレームワーク固有の既定の XAML 名前空間にマップされないため、XAML で使用するにはプレフィックスのマッピングが必要です。

コンマ区切り記号を使用することで、複数の XAML 型名を指定できます。

ジェネリック制約自体でジェネリック型を使用する場合は、入れ子になった制約型の引数をかっこ () で囲んで含めることができます。

x:TypeArguments のこの定義は、.NET XAML サービスおよび CLR バッキングの使用に固有であることに注意してください。 言語レベルの定義については、[MS-XAML] のセクション 7.3.11 を参照してください。

使用例

これらの例では、次の XAML 名前空間の定義が宣言されているものとします。

xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib"

List<String>

<scg:List x:TypeArguments="sys:String" ...> と指定すると、1 つの String 型引数を使用して新しい List<T> がインスタンス化されます。

Dictionary<String,String>

<scg:Dictionary x:TypeArguments="sys:String,sys:String" ...> と指定すると、2 つの String 型引数を使用して新しい Dictionary<TKey,TValue> がインスタンス化されます。

Queue<KeyValuePair<String,String>>

<scg:Queue x:TypeArguments="scg:KeyValuePair(sys:String,sys:String)" ...> と指定すると、内部制約型引数 StringString を使用して、KeyValuePair<TKey,TValue> の制約を持つ新しい Queue<T> がインスタンス化されます。

XAML 2006 と WPF ジェネリック XAML の使用

XAML 2006 を使用する場合、および WPF アプリケーションで使用される XAML の場合は、XAML からの x:TypeArguments とジェネリック型の使用に関して一般に次の制限があります。

  • ジェネリック型を参照するジェネリック XAML の使用をサポートできるのは、XAML ファイルのルート要素だけです。

  • ルート要素は、少なくとも 1 つの型引数でジェネリック型にマップしている必要があります。 たとえば PageFunction<T> です。 ページ関数は、WPF で XAML のジェネリックの使用がサポートされる主要なシナリオです。

  • ジェネリックのルート要素の XAML オブジェクト要素でも、x:Class を使用して部分クラスが宣言されている必要があります。 これは、WPF ビルド アクションを定義する場合にも当てはまります。

  • x:TypeArguments で入れ子になったジェネリック制約を参照することはできません。

WPF 3.0 または WPF 3.5 の依存関係のない XAML 2009 または XAML 2006

XAML 2006 または XAML 2009 向けの .NET XAML サービスの場合、ジェネリック XAML の使用に関する WPF 関連の制限が緩和されます。 バッキング型システムおよびオブジェクト モデルでサポートできる XAML マークアップの任意の位置で、ジェネリック オブジェクト要素をインスタンス化できます。

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

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

WPF で .NET Framework 4 または .NET Core 3.0 (以降) を対象にする場合は、XAML 2009 の機能を x:TypeArguments と共に使用できますが、Loose XAML (マークアップでコンパイルされていない XAML) の場合だけです。 WPF 向けにマークアップ コンパイルされた XAML、および XAML の BAML 形式は、現在、XAML 2009 のキーワードと機能をサポートしていません。 XAML をマークアップでコンパイルする必要がある場合は、「XAML 2006 と WPF ジェネリック XAML の使用」セクションに記載されている制限事項に従って操作する必要があります。 BAML は .NET Framework でのみサポートされます。

関連項目