カスタム型およびライブラリの XAML 関連の CLR 属性
このトピックでは、.NET XAML サービスによって定義されている共通言語ランタイム (CLR) の属性について説明します。 また、.NET で定義されている他の CLR 属性のうち、アセンブリまたは型への適用に関して XAML 関連のシナリオがあるものについても説明します。 これらの CLR 属性を使用してアセンブリ、型、またはメンバーの属性を設定すると、型に関連する XAML 型システムの情報が提供されます。 XAML ノード ストリームを直接処理する、または専用の XAML リーダーと XAML ライターを通して処理するために .NET XAML サービスを使用するすべての XAML コンシューマーに情報が提供されます。
カスタム型とカスタム メンバーの XAML 関連の CLR 属性
CLR 属性を使用する場合は、CLR 全体を使用して型を定義する必要があります。そうしないと、このような属性は使用できません。 CLR を使用して型のバッキングを定義する場合、.NET XAML サービスの XAML ライターによって使用される既定の XAML スキーマ コンテキストで、バッキング アセンブリに対するリフレクションを通じて CLR 属性を読み取ることができます。
以下のセクションでは、カスタム型またはカスタム メンバーに適用できる XAML 関連の属性について説明します。 各 CLR 属性により、XAML 型システムに関連する情報が伝達されます。 読み込みパスでの属性付きの情報は、XAML リーダーが有効な XAML ノード ストリームを形成する際に、または XAML ライターが有効なオブジェクト グラフを生成する際に役立ちます。 保存パスでの属性付きの情報は、XAML リーダーが XAML 型システムの情報を再構成する有効な XAML ノード ストリームを形成する際に役立ちます。または、XAML ライターや他の XAML コンシューマーのためにシリアル化のヒントまたは要件を宣言します。
AmbientAttribute
リファレンス ドキュメント:AmbientAttribute
適用対象: アタッチ可能なプロパティをサポートするクラス、プロパティ、または get
アクセサー メンバー。
引数: なし
AmbientAttribute は、プロパティ (つまり属性付きの型を受け取るすべてのプロパティ) を、XAML のアンビエント プロパティの概念で解釈する必要があることを示します。 アンビエントの概念は XAML プロセッサがメンバーの型の所有者を確認する方法と関連します。 アンビエント プロパティの場合、その値はオブジェクト グラフの作成時にパーサー コンテキストで使用できることが期待されますが、一般的な型メンバーの参照は即時 XAML ノード セットが作成されている間は中断されます。
アンビエントの概念はアタッチ可能なメンバーに適用できますが、CLR 属性での AttributeTargets の定義方法の観点からはプロパティとしては表されません。 メソッド属性の使用は、XAML のアタッチ可能な使用をサポートする get
アクセサーに対してのみ適用する必要があります。
ConstructorArgumentAttribute
リファレンス ドキュメント:ConstructorArgumentAttribute
適用対象: クラス
引数: 単一のコンストラクター引数に一致するプロパティの名前を指定する文字列。
ConstructorArgumentAttribute は、パラメーターなしではないコンストラクターの構文を使用してオブジェクトを初期化できること、および指定した名前のプロパティによって構築の情報が提供されることを指定します。 この情報は主に XAML シリアル化用です。 詳細については、「ConstructorArgumentAttribute」を参照してください。
ContentPropertyAttribute
リファレンス ドキュメント:ContentPropertyAttribute
適用対象: クラス
引数: 属性付きの型のメンバーの名前を指定する文字列。
ContentPropertyAttribute は、引数で指定されているプロパティが、その型の XAML コンテンツ プロパティとして機能する必要があることを示します。 XAML コンテンツ プロパティの定義は、定義している型に割り当てることができるすべての派生型に継承されます。 特定の派生型に対して ContentPropertyAttribute を適用することで、特定の派生型の定義をオーバーライドできます。
XAML コンテンツ プロパティとして機能するプロパティの場合、プロパティのプロパティ要素のタグ付けを XAML の使用時に省略できます。 通常、コンテンツ モデルと包含モデルに対する簡素化された XAML マークアップを促進する XAML コンテンツ プロパティを指定します。 XAML コンテンツ プロパティとして指定できるメンバーは 1 つだけなので、型のいくつかのコンテナー プロパティのどれを XAML コンテンツ プロパティとして指定する必要があるかを、デザイン時に選択する場合があります。 他のコンテナー プロパティは、明示的なプロパティ要素で使用する必要があります。
XAML ノード ストリームでは、XAML コンテンツ プロパティにより、StartMember
のプロパティの名前を使用して、EndMember
および XamlMember ノードが生成されます。 メンバーが XAML コンテンツ プロパティかどうかを判断するには、XamlType の位置にある StartObject
の値を調べて、ContentProperty の値を取得します。
ContentWrapperAttribute
リファレンス ドキュメント:ContentWrapperAttribute
適用対象: クラス、特にコレクション型。
引数: 外部コンテンツのコンテンツ ラッパー型として使用する型を指定する Type。
ContentWrapperAttribute は、関連付けられたコレクション型で、外部コンテンツをラップするために使用される 1 つ以上の型を指定します。 外部コンテンツとは、コンテンツ プロパティの型に対する型システムの制約により、所有する型に関する XAML の使用によってサポートされる可能性のあるすべてのコンテンツ ケースがキャプチャされない場合を指します。 たとえば、特定の型のコンテンツの XAML によるサポートで、厳密に型指定されたジェネリック Collection<T> の文字列がサポートされる場合があります。 コンテンツ ラッパーは、既存のマークアップ規則を、コレクションの割り当て可能な値という XAML の構想に移行する場合に便利です (テキスト関連のコンテンツ モデルの移行など)。
複数のコンテンツ ラッパー型を指定するには、属性を複数回適用します。
DependsOnAttribute
リファレンス ドキュメント:DependsOnAttribute
適用対象: プロパティ
引数: 属性付きの型の別のメンバーの名前を指定する文字列。
DependsOnAttribute は、属性付きプロパティが別のプロパティの値に依存することを示します。 この属性をプロパティ定義に適用すると、XAML オブジェクトの書き込みで依存プロパティが最初に処理されるようになります。 DependsOnAttribute を使用して、有効なオブジェクトの作成には特定の解析順序に従う必要がある型でのプロパティの例外的なケースを指定します。
1 つのプロパティ定義に、DependsOnAttribute の複数のケースを適用できます。
MarkupExtensionReturnTypeAttribute
リファレンス ドキュメント:MarkupExtensionReturnTypeAttribute
適用対象:MarkupExtension の派生型であることが想定されるクラス。
引数: 属性付きの Type の結果の ProvideValue
として予想される最も正確な型を指定する MarkupExtension。
詳細については、「XAML のマークアップ拡張機能の概要」を参照してください。
NameScopePropertyAttribute
リファレンス ドキュメント:NameScopePropertyAttribute
適用対象: クラス
引数: 2 つの形式の属性がサポートされます。
属性付きの型のプロパティの名前を指定する文字列。
プロパティの名前を指定する文字列と、名前付きプロパティを定義する型の Type。 この形式は、XAML 名前スコープ プロパティとしてアタッチ可能なメンバーを指定するためのものです。
NameScopePropertyAttribute は、属性付きクラスに XAML 名前スコープの値を提供するプロパティを指定します。 XAML 名前スコープ プロパティは、INameScope を実装し、実際の XAML 名前スコープ、ストア、およびその動作を保持するオブジェクトを参照することが想定されています。
RuntimeNamePropertyAttribute
リファレンス ドキュメント:RuntimeNamePropertyAttribute
適用対象: クラス
引数: 属性付きの型の実行時の名前プロパティの名前を指定する文字列。
RuntimeNamePropertyAttribute は、XAML の x:Name ディレクティブにマップされる属性付きの型のプロパティを報告します。 そのプロパティは、String 型で、読み取り/書き込み可能である必要があります。
その定義は、定義している型に割り当てることができるすべての派生型に継承されます。 特定の派生型に対して RuntimeNamePropertyAttribute を適用することで、特定の派生型の定義をオーバーライドできます。
TrimSurroundingWhitespaceAttribute
リファレンス ドキュメント:TrimSurroundingWhitespaceAttribute
適用対象: 型
引数: なし。
TrimSurroundingWhitespaceAttribute は、空白が意味を持つコンテンツ (WhitespaceSignificantCollectionAttribute が設定されたコレクションによって保持されるコンテンツ) 内の子要素として出現する可能性のある特定の型に適用されます。 TrimSurroundingWhitespaceAttribute は主に保存パスに関連しますが、XamlType.TrimSurroundingWhitespace を調べることにより、XAML 型システムの読み込みパスで使用できます。 詳細については、「XAML での空白の処理」を参照してください。
TypeConverterAttribute
リファレンス ドキュメント:TypeConverterAttribute
適用対象: クラス、プロパティ、メソッド (XAML で有効な唯一のメソッドは、アタッチ可能なメンバーをサポートする get
アクセサーです)。
引数:Type の TypeConverter。
XAML のコンテキストでの TypeConverterAttribute は、カスタム TypeConverter を参照します。 この TypeConverter により、カスタム型またはその型のメンバーに対する型変換動作が提供されます。
TypeConverterAttribute 属性を型に適用し、型コンバーターの実装を参照します。 XAML 用の型コンバーターは、クラス、構造体、またはインターフェイスで定義できます。 列挙型に型変換を提供する必要はありません。その変換はネイティブで有効になります。
型コンバーターを使用して、マークアップ内の属性または初期化テキストに使用されている文字列を、目的の型に変換できる必要があります。 詳細については、「TypeConverters および XAML」を参照してください。
型のすべての値に適用するのではなく、XAML 用の型コンバーターの動作を特定のプロパティに設定することもできます。 この場合は、TypeConverterAttribute をプロパティの定義 (特定の get
および set
の定義ではなく、外側の定義) に適用します。
カスタム アタッチ可能メンバーを XAML で使用する場合の型コンバーターの動作は、XAML での使用をサポートする TypeConverterAttribute メソッド アクセサーに get
を適用することによって割り当てることができます。
TypeConverter と同様に、TypeConverterAttribute は XAML が存在するようになる前の .NET に既にあり、型コンバーター モデルは他の目的に使用されていました。
TypeConverterAttribute を参照して使用するには、それを完全修飾するか、または using
の System.ComponentModel ステートメントを指定する必要があります。 また、プロジェクトに System アセンブリを含めます。
UidPropertyAttribute
リファレンス ドキュメント:UidPropertyAttribute
適用対象: クラス
引数: 関連するプロパティを名前で参照する文字列。
x:Uid ディレクティブの別名を指定するクラスの CLR プロパティを示します。
UsableDuringInitializationAttribute
リファレンス ドキュメント:UsableDuringInitializationAttribute
適用対象: クラス
引数: ブール値。 属性の目的で使用する場合は、値を true
に設定する必要があります。
その型が XAML オブジェクト グラフの作成中にトップダウンで構築されるかどうかを示します。 これは高度な概念であり、プログラミング モデルの定義と密接に関連していると考えられます。 詳細については、「UsableDuringInitializationAttribute」を参照してください。
ValueSerializerAttribute
リファレンス ドキュメント:ValueSerializerAttribute
適用対象: クラス、プロパティ、メソッド (XAML で有効な唯一のメソッドは、アタッチ可能なメンバーをサポートする get
アクセサーです)。
引数: 属性付きの型のすべてのプロパティ、または特定の属性付きプロパティをシリアル化するときに使用する値シリアライザー サポート クラスを指定する Type。
ValueSerializer は、TypeConverter で行われる場合より多くの状態とコンテキストを必要とする値シリアル化クラスを指定します。 アタッチ可能なメンバーの静的 ValueSerializer アクセサー メソッドに ValueSerializerAttribute 属性を適用することによって、get
をアタッチ可能なメンバーに関連付けることができます。 値のシリアル化は、列挙型、インターフェイス、構造体にも適用できますが、デリゲートには適用できません。
WhitespaceSignificantCollectionAttribute
リファレンス ドキュメント:WhitespaceSignificantCollectionAttribute
適用対象: クラス。具体的には、UI 表現のためにオブジェクト要素の周囲の空白が意味を持つ場合がある、混合コンテンツをホストすることが想定されているコレクション型。
引数: なし。
WhitespaceSignificantCollectionAttribute は、XAML プロセッサでコレクション型を空白が意味を持つものとして処理する必要があることを示します。これは、コレクション内の XAML ノード ストリームの値ノードの構築に影響します。 詳細については、「XAML での空白の処理」を参照してください。
XamlDeferLoadAttribute
リファレンス ドキュメント:XamlDeferLoadAttribute
適用対象: クラス、プロパティ。
引数: 文字列としての 2 つの属性フォーム型、または Type としての型がサポートされます。 以下を参照してください。XamlDeferLoadAttribute
クラスまたはプロパティに XAML の遅延読み込みの使用 (テンプレート動作など) が含まれていることを示し、遅延動作を有効にするクラスと、その宛先/コンテンツ タイプを報告します。
XamlSetMarkupExtensionAttribute
リファレンス ドキュメント:XamlSetMarkupExtensionAttribute
適用対象: クラス
引数: コールバックの名前を指定します。
クラスでマークアップ拡張を使用して 1 つ以上のプロパティに値を提供できることを示し、クラスの任意のプロパティでマークアップ拡張設定操作を実行する前に XAML ライターで呼び出す必要があるハンドラーを参照します。
XamlSetTypeConverterAttribute
リファレンス ドキュメント:XamlSetTypeConverterAttribute
適用対象: クラス
引数: コールバックの名前を指定します。
クラスで型コンバーターを使用して 1 つ以上のプロパティに値を提供できることを示し、クラスの任意のプロパティで型コンバーター設定操作を実行する前に XAML ライターで呼び出す必要があるハンドラーを参照します。
XmlLangPropertyAttribute
リファレンス ドキュメント:XmlLangPropertyAttribute
適用対象: クラス
引数: 属性付きの型の xml:lang
に別名を設定するプロパティの名前を指定する文字列。
XmlLangPropertyAttribute は、XML の lang
ディレクティブにマップされる属性付きの型のプロパティを報告します。 プロパティは、String 型でなくてもかまいませんが、文字列から割り当て可能である必要があります (割り当ては、型コンバーターをプロパティの型または特定のプロパティに関連付けることによって実現できます)。 プロパティは、読み取り/書き込み可能である必要があります。
xml:lang
をマッピンするのは、XMLDOM で明示的に処理することなく、ランタイム オブジェクト モデルが XML で指定された言語情報にアクセスできるようにするためです。
その定義は、定義している型に割り当てることができるすべての派生型に継承されます。 特定の派生型に対して XmlLangPropertyAttribute を適用することで、特定の派生型の定義をオーバーライドできますが、これは一般的なシナリオではありません。
アセンブリ レベルでの XAML 関連の CLR 属性
以下のセクションでは、型またはメンバーの定義には適用されず、代わりにアセンブリに適用される、XAML 関連の属性について説明します。 これらの属性は、XAML で使用するカスタム型を含むライブラリを定義するという全体的な目標に関連します。 一部の属性は、必ずしも XAML ノード ストリームに直接影響しませんが、他のコンシューマーが使用できるようにノード ストリームに渡されます。 この情報のコンシューマーには、XAML の名前空間情報および関連するプレフィックス情報を必要とするデザイン環境またはシリアル化プロセスが含まれます。 XAML スキーマ コンテキスト (.NET XAML サービスの既定値を含む) も、この情報を使用します。
XmlnsCompatibleWithAttribute
リファレンス ドキュメント:XmlnsCompatibleWithAttribute
引数:
含める XAML 名前空間の識別子を指定する文字列。
前の引数から XAML 名前空間を含めることができる XAML 名前空間の識別子を指定する文字列。
XmlnsCompatibleWithAttribute は、XAML 名前空間を別の XAML 名前空間に包含できることを指定します。 通常、包含する側の XAML 名前空間は、あらかじめ定義した XmlnsDefinitionAttribute で示されます。 この手法を使用して、ライブラリ内の XAML ボキャブラリのバージョンを管理し、以前にバージョン管理されていたボキャブラリに対して前に定義されたマークアップと互換性を持たせることができます。
XmlnsDefinitionAttribute
リファレンス ドキュメント:XmlnsDefinitionAttribute
引数:
定義する XAML 名前空間の識別子を指定する文字列。
CLR 名前空間の名前を指定する文字列。 CLR 名前空間でアセンブリ内のパブリック型を定義する必要があり、CLR 名前空間の型のうち少なくとも 1 つを XAML 用にする必要があります。
XmlnsDefinitionAttribute は、XAML 名前空間と CLR 名前空間の間の、アセンブリごとのマッピングを指定します。これは XAML オブジェクト ライターまたは XAML スキーマ コンテキストで、型の解決に使用されます。
1 つのアセンブリに複数の XmlnsDefinitionAttribute を適用できます。 これは、以下の理由の任意の組み合わせによって行われる可能性があります。
ライブラリの設計に、実行時 API アクセスの論理的な編成のために複数の CLR 名前空間が含まれます。ただし、同じ XAML 名前空間を参照することにより、それらの名前空間のすべての型を XAML で使用できるようにする必要があります。 この場合、XmlnsDefinitionAttribute には同じ値、XmlNamespace には異なる値を使用して、複数の ClrNamespace 属性を適用します。 これは、フレームワークまたはアプリケーションで一般的な使用での既定の XAML 名前空間にすることが考えられている XAML 名前空間のマッピングを定義する場合に特に便利です。
ライブラリの設計に複数の CLR 名前空間が含まれており、それらの CLR 名前空間での型の使用の間で、XAML 名前空間を意図的に分離する必要があります。
アセンブリで CLR 名前空間を定義し、複数の XAML 名前空間からそれにアクセスできるようにする必要があります。 このシナリオは、同じコードベースで複数のボキャブラリをサポートする場合に発生します。
1 つまたは複数の CLR 名前空間で、XAML 言語のサポートを定義します。 この場合、XmlNamespace の値を
http://schemas.microsoft.com/winfx/2006/xaml
にする必要があります。
XmlnsPrefixAttribute
リファレンス ドキュメント:XmlnsPrefixAttribute
引数:
XAML 名前空間の識別子を指定する文字列。
推奨されるプレフィックスを指定する文字列。
XmlnsDefinitionAttribute は、XAML 名前空間に使用することが推奨されるプレフィックスを指定します。 プレフィックスは、.NET XAML サービスの XamlXmlWriter によってシリアル化される要素や属性を XAML ファイルに記述する場合や、XAML を実装するライブラリで XAML 編集機能を持つデザイン環境と対話する場合に便利です。
1 つのアセンブリに複数の XmlnsPrefixAttribute を適用できます。 これは、以下の理由の任意の組み合わせによって行われる可能性があります。
アセンブリで、複数の XAML 名前空間用の型が定義されています。 この場合は、XAML 名前空間ごとに異なるプレフィックス値を定義します。
複数のボキャブラリをサポートしており、各ボキャブラリと XAML 名前空間に異なるプレフィックスを使用します。
アセンブリで XAML 言語のサポートを定義し、XmlnsDefinitionAttribute 用の
http://schemas.microsoft.com/winfx/2006/xaml
があります。 この場合は、通常、プレフィックスx
を昇格させる必要があります。
注意
.NET XAML サービスでも、XAML 関連の属性 RootNamespaceAttribute が定義されています。 この属性は、プロジェクト システム サポート用のアセンブリ レベルの属性であり、XAML のカスタム型には関係ありません。
関連項目
.NET Desktop feedback