x:Array のマークアップ拡張機能

マークアップ拡張機能を介して、XAML 内のオブジェクトの配列に対する一般的なサポートを提供します。 これは、[MS-XAML] の x:ArrayExtension XAML 型に対応します。

XAML オブジェクト要素の使用方法

<x:Array Type="typeName">
  arrayContents
</x:Array>

XAML 値

typeName x:Array に含まれる型の名前。 typeName は、XAML 型の定義を含む XAML 名前空間の前に付けられる場合があります (多くの場合、そうです)。
arrayContents 組み込みの ArrayExtension.Items プロパティに割り当てられている項目の内容。 通常、これらの項目は、x:Array の開始と終了タグ内に含まれる 1 つ以上のオブジェクト要素として指定されます。 ここで指定されるオブジェクトは、typeName に指定された XAML 型に割り当て可能である必要があります。

解説

Type は、すべての x:Array オブジェクト要素に必須の属性です。 Type パラメーター値に x:Type マークアップ拡張機能を使用する必要はありません。この型の短い名前は XAML 型であり、文字列として指定できます。

.NET XAML サービスの実装では、作成された配列の入力 XAML 型と出力 CLR Type の関係は、マークアップ拡張機能のサービス コンテキストの影響を受けます。 出力 Type は、XAML スキーマ コンテキストとそのコンテキストで提供される IXamlTypeResolver サービスに基づいて、必要な XamlType を検索した後の入力 XAML 型の UnderlyingType です。

処理されると、配列の内容は ArrayExtension.Items 組み込みプロパティに割り当てられます。 ArrayExtension の実装では、これは ArrayExtension.Items で表されます。

.NET XAML サービスの実装では、このマークアップ拡張機能の処理は ArrayExtension クラスによって定義されています。 ArrayExtension はシールドではなく、カスタム配列型のマークアップ拡張機能の実装の基礎として使用できます。

x:Array は、XAML での汎用的な言語拡張機能を目的としています。 ただし、x:Array は、XAML でサポートされているコレクションを構造化プロパティの内容として受け取る特定のプロパティの XAML 値を指定する場合にも役立ちます。 たとえば、x:Array の使用法により、IEnumerable プロパティの内容を指定できます。

x:Array はマークアップ拡張機能です。 一般にマークアップ拡張機能を実装するのは、属性値をリテラル値やハンドラー名以外にエスケープする要件が存在し、その要件の適用範囲がグローバルで、特定の型やプロパティに型コンバーターを適用するだけにとどまらない場合です。 x:Array は、この規則の部分的な例外です。これは、代替の属性値処理が用意されるのではなく、x:Array にその内側のテキスト コンテンツの代替処理が用意されているためです。 この動作により、既存のコンテンツ モデルでサポートされていない可能性のある型を配列にグループ化し、名前付き配列にアクセスすることで、後で分離コードで参照できるようになります。つまり、Array メソッドを呼び出して、個々の配列項目を取得できます。

XAML のすべてのマークアップ拡張機能では、それぞれの属性構文で中かっこ ({,}) が使用されます。これは規約であり、これに従って XAML プロセッサでは、マークアップ拡張機能で属性値を処理する必要があることが認識されます。 一般的なマークアップ拡張機能の詳細については、「XAML の型コンバーターおよびマークアップ拡張機能」を参照してください。

XAML 2009 では、x:Array はマークアップ拡張機能ではなく言語プリミティブとして定義されています。 詳細については、「共通の XAML 言語プリミティブの組み込み型」を参照してください。

WPF の使用上の注意

通常、x:Array に設定されるオブジェクト要素は WPF XAML 名前空間に存在する要素ではありません。また、既定ではない XAML 名前空間へのプレフィックス マッピングが必要です。

配列のレベルで sys プレフィックス (および x) が定義されている 2 つの文字列の単純な配列の例を次に示します。

<x:Array Type="sys:String"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib">
  <sys:String>Hello</sys:String>
  <sys:String>World</sys:String>
</x:Array>

配列要素として使用されているカスタム型の場合、クラスは、XAML でオブジェクト要素としてインスタンス化されるための要件もサポートする必要があります。 詳細については、「WPF における XAML とカスタム クラス」を参照してください。

関連項目