x:Type マークアップ拡張機能
指定した XAML 型の基になる型の CLR Type オブジェクトを指定します。
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 との関係は、XAML スキーマ コンテキストとそのコンテキストが提供する IXamlTypeResolver サービスに基づいて必須の XamlType を検索した後、出力 Type が入力 XamlType の UnderlyingType であることです。
.NET Framework XAML サービスでは、このマークアップ拡張機能の処理は、TypeExtension クラスによって定義されます。
特定のフレームワーク実装では、値として Type を受け取る一部のプロパティは、型の名前 (型の Name の文字列値) を直接受け入れることができます。 ただし、このような動作を実装するのは複雑なシナリオとなります。 例については、後の「WPF の使用上の注意」を参照してください。
属性構文は、このマークアップ拡張機能で使用される最も一般的な構文です。 x:Type 識別子文字列の後に設定される文字列トークンは、基になる TypeExtension 拡張クラスの TypeName 値として割り当てられます。 CLR 型に基づく、.NET Framework XAML サービスの既定の XAML スキーマ コンテキストでは、この属性の値は、対象の型の Name になるか、または、既定以外の XAML 名前空間割り当ての場合はプレフィックスが付加された Name を含みます。
x:Type マークアップ拡張機能は、オブジェクト要素構文で使用できます。 この場合、拡張機能を正しく初期化するには、TypeName プロパティの値を指定する必要があります。
x:Type マークアップ拡張機能は詳細出力属性として使用することもできますが、この用法は一般的ではありません (<object property="{x:Type TypeName=typeNameValue}" .../>)。
WPF の使用上の注意
既定の XAML 名前空間および型の割り当て
WPF プログラミングの既定の XAML 名前空間には、通常の XAML シナリオで必要なほとんどの XAML 型が含まれるため、通常は、XAML 型値を参照するときにプレフィックスを回避できます。 カスタム アセンブリ内の型を参照している場合、または WPF アセンブリ内に存在する型ではあるが、その型がある CLR 名前空間が既定の XAML 名前空間に割り当てられていない場合は、プレフィックスの割り当てが必要になることがあります。 プレフィックス、XML 名前空間、および CLR 名前空間の割り当ての詳細については、「XAML 名前空間および WPF XAML の名前空間の割り当て」を参照してください。
文字列としての型名をサポートする型プロパティ
WPF は、x:Type マークアップ拡張機能を使用する必要なく、型 Type の一部のプロパティの値を指定できる技術をサポートしています。 代わりに、型に名前を付ける文字列として値を指定できます。 この例としては、ControlTemplate.TargetType および Style.TargetType があります。 型コンバーターとマークアップ拡張機能は、どちらもこの動作をサポートしていません。 これは、FrameworkElementFactory を通じて実装される遅延動作です。
Silverlight も同様の規則となります。 実際、Silverlight の XAML 言語の対応状況を見ると、現在 {x:Type} はサポートされていません。WPF から Silverlight への XAML の移行支援を意図した一部の状況を除いて、{x:Type} の使用は認められていません。 したがって、文字列としての型名の動作は、Type が値となる、Silverlight のすべてのネイティブ プロパティの評価に組み込まれています。
XAML 2009
XAML 2009 はジェネリック型に対するサポートを強化し、このサポートを実現できるよう x:TypeArguments および x:Type の機能の動作を修正します。
x:TypeArguments および汎用オブジェクトのインスタンス化で使用される関連オブジェクト要素は、ルート以外の要素上にあることがあります。 詳細については、「x:TypeArguments ディレクティブ」の「XAML 2009」のセクションを参照してください。
XAML 2009 は、マークアップでジェネリック型の制約を指定する構文をサポートします。 これは、x:TypeArguments、x:Type、またはこれら 2 つの機能の組み合わせで使用できます。
XAML 2009 の読み込みを処理する WPF の XAML 実装も、型 Type を使用する特定のフレームワーク プロパティの暗黙的な型変換動作に対して、この機能を追加します。
WPF では XAML 2009 の機能を使用できますが、Loose XAML (マークアップ コンパイルされていない XAML) に限定されます。 WPF 向けにマークアップ コンパイルされた XAML、および XAML の BAML 形式は、現在、XAML 2009 のキーワードと機能をサポートしていません。