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

指定された XAML 型の基になる型である、CLR Type オブジェクトを提供します。

XAML 属性の使用方法

<object property="{x:Type prefix:typeNameValue}" .../>

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

<x:Type TypeName="prefix:typeNameValue"/>

XAML 値

説明
prefix 省略可能。 既定以外の XAML 名前空間をマップするプレフィックスです。 多くの場合、プレフィックスを指定する必要はありません。 「解説」を参照してください。
typeNameValue 必須です。 現在の既定の XAML 名前空間へと解決できる型名。または、prefix が指定されている場合は、指定されたマップ済みプレフィックス。

Remarks

x:Type マークアップ拡張機能には、C# の typeof() 演算子や Microsoft Visual Basic の GetType 演算子に似た関数があります。

x:Type マークアップ拡張機能は、Type 型を受け取るプロパティに対して、文字列変換動作を提供します。 入力は XAML 型です。 入力の XAML 型と出力の CLR Type の関係は、出力の Type が入力の XamlTypeUnderlyingType であるという関係です (XAML スキーマ コンテキストとそのコンテキストによって提供される IXamlTypeResolver サービスに基づいて、必要な XamlType が検索された後)。

.NET XAML サービスでは、このマークアップ拡張機能の処理は TypeExtension クラスによって定義されています。

特定のフレームワーク実装では、Type を値として受け取る一部のプロパティで、型の名前 (型 Name の文字列値) を直接受け入れることができます。 ただし、この動作を実装する場合は、シナリオが複雑になります。 例については、後述の「WPF の使用に関する注意事項」を参照してください。

属性構文は、このマークアップ拡張機能で使用される最も一般的な構文です。 x:Type 識別子文字列の後に設定される文字列トークンは、基になる TypeName 拡張クラスの TypeExtension 値として割り当てられます。 .NET XAML サービスの既定の XAML スキーマ コンテキスト (CLR 型に基づくもの) では、この属性の値は目的の型の Name になるか、または既定以外の XAML 名前空間マッピングのプレフィックスが付いた、Name を含むものになります。

x:Type マークアップ拡張機能は、オブジェクト要素構文で使用できます。 この場合、拡張機能を正しく初期化するには、TypeName プロパティの値を指定する必要があります。

x:Type マークアップ拡張機能は、 詳細出力属性としても使用できます。ただし、この使い方は一般的ではありません: <object property="{x:Type TypeName=typeNameValue}" .../>

WPF の使用上の注意

既定の XAML 名前空間と型のマッピング

WPF プログラミングの既定の XAML 名前空間には、一般的な XAML シナリオに必要な XAML 型の大部分が含まれています。そのため、多くの場合、XAML 型の値を参照する際にはプレフィックスを回避することができます。 カスタム アセンブリの型を参照する場合や、WPF アセンブリ内に存在しているものの、既定の XAML 名前空間にはマップされていない CLR 名前空間の型を参照する場合には、プレフィックスの割り当てが必要になることがあります。 プレフィックス、XAML 名前空間について、および CLR 名前空間のマッピングについて詳しくは、「XAML 名前空間および WPF XAML の名前空間の割り当て」を参照してください。

文字列としての型名をサポートする型プロパティ

WPF では、x:Type マークアップ拡張機能を使用せずに、Type 型の一部のプロパティの値を指定できるテクニックがサポートされています。 これは、型の名前を指定する文字列として値を指定できるというものです。 その例としては、ControlTemplate.TargetTypeStyle.TargetType があります。 この動作は、型コンバーターやマークアップ拡張機能ではサポートされません。 これは、FrameworkElementFactory を通じて実装される遅延動作です。

Silverlight では、同様の規則がサポートされています。 実際、Silverlight では現在、XAML 言語サポートにおいて {x:Type} はサポートされておらず、WPF-Silverlight の XAML 移行をサポートするように意図されたいくつかの状況以外では、{x:Type} を使用できません。 そのため、"文字列としての型名" の動作は、Type が値となるすべての Silverlight ネイティブ プロパティ評価に組み込まれています。

XAML 2009

XAML 2009 では、ジェネリック型の追加サポートが提供されています。また、このサポートを提供するために、x:TypeArgumentsx:Type の機能の動作が変更されています。

  • x:TypeArguments と、ジェネリック オブジェクトのインスタンス化のために関連付けられたオブジェクト要素は、ルート以外の要素でも使用できます。 詳細については、「x:TypeArguments ディレクティブ」の「XAML 2009」セクションを参照してください。

  • XAML 2009 では、ジェネリック型の制約をマークアップで指定するための構文がサポートされています。 これは x:TypeArgumentsx:Type、またはそれら 2 つの機能の組み合わせで使用できます。

  • XAML 2009 を読み込み用に処理する場合の WPF XAML 実装でも、型 Type を使用する特定のフレームワーク プロパティの暗黙的な型変換動作に、この機能が追加されます。

WPF では XAML 2009 の機能を使用できますが、Loose XAML (マークアップ コンパイルされていない XAML) に限定されます。 WPF 向けにマークアップ コンパイルされた XAML、および XAML の BAML 形式は、現在、XAML 2009 のキーワードと機能をサポートしていません。

関連項目