次の方法で共有


XAML サービス

このトピックでは、.NET XAML サービスと呼ばれるテクノロジ セットの機能について説明します。 説明されているサービスと API の大部分は、アセンブリ System.Xamlにあります。 サービスには、リーダーとライター、スキーマ クラスとスキーマのサポート、ファクトリ、クラスの属性、XAML 言語の組み込みサポート、およびその他の XAML 言語機能が含まれます。

このドキュメントについて

.NET XAML Services の概念ドキュメントでは、XAML 言語の経験があり、それが特定のフレームワーク (Windows Presentation Foundation (WPF) や Windows Workflow Foundation など)、特定のテクノロジ機能領域 (Microsoft.Build.Framework.XamlTypesのビルドカスタマイズ機能など) にどのように適用されるかを前提としています。 このドキュメントでは、マークアップ言語としての XAML の基本、XAML 構文の用語、またはその他の入門資料については説明しません。 代わりに、このドキュメントでは、System.Xaml アセンブリ ライブラリで有効になっている .NET XAML サービスを特に使用することに重点を置いています。 これらの API のほとんどは、XAML 言語の統合と拡張性のシナリオ用です。 これには、次のいずれかのシナリオが含まれる場合があります。

  • ベース XAML リーダーまたは XAML ライターの機能を拡張する (XAML ノード ストリームを直接処理し、独自の XAML リーダーまたは XAML ライターを派生させる)。

  • 特定のフレームワーク依存関係を持たない XAML で使用できるカスタム型を定義し、その XAML 型システム特性を .NET XAML サービスに伝えるために型を属性化する。

  • XAML リーダーまたは XAML ライターをアプリケーションのコンポーネントとしてホストする (XAML マークアップ ソースのビジュアル デザイナーや対話型エディターなど)。

  • XAML 値コンバーター (マークアップ拡張、カスタム型の型コンバーター) の記述。

  • カスタム XAML スキーマ コンテキストを定義する (型ソースをバッキングするための代替アセンブリ読み込み手法を使用する。常にアセンブリを反映するのではなく、既知の型参照手法を使用する、共通言語ランタイム (CLR) AppDomain とその関連するセキュリティ モデルを使用しない読み込まれたアセンブリの概念を使用する)。

  • 基本 XAML 型システムの拡張。

  • Lookup または Invoker 手法を使用して、XAML 型システムと型バッキングの評価方法に影響を与えます。

言語としての XAML の入門資料をお探しの場合は、XAML の概要 (WPF .NET)してみてください。 このトピックでは、Windows Presentation Foundation (WPF) と XAML マークアップと XAML 言語機能の両方を初めて使用する対象ユーザー向けの XAML について説明します。 もう 1 つの便利なドキュメントは、XAML 言語仕様の入門資料です。

.NET アーキテクチャでの .NET XAML サービスと System.Xaml

.NET XAML サービスと System.Xaml アセンブリは、XAML 言語機能をサポートするために必要なものの多くを定義します。 これには、XAML リーダーと XAML ライターの基底クラスが含まれます。 フレームワーク固有の XAML 実装に存在しなかった .NET XAML サービスに追加された最も重要な機能は、XAML の型システム表現です。 型システム表現は、フレームワークの特定の機能に依存することなく、XAML 機能を中心とするオブジェクト指向の方法で XAML を提供します。

XAML 型システムは、XAML 配信元のマークアップ フォームまたは実行時の仕様によって制限されません。また、特定のバッキングタイプシステムによって制限されることはありません。 XAML 型システムには、型、メンバー、XAML スキーマ コンテキスト、XML レベルの概念、およびその他の XAML 言語の概念または XAML 組み込みのオブジェクト表現が含まれています。 XAML 型システムを使用または拡張すると、XAML リーダーや XAML ライターなどのクラスから派生し、XAML 表現の機能を、フレームワーク、テクノロジ、または XAML を使用または出力するアプリケーションによって有効になる特定の機能に拡張できます。 XAML スキーマ コンテキストの概念により、XAML オブジェクト ライター実装、コンテキスト内のアセンブリ情報を介して通信されるテクノロジのバッキング型システム、および XAML ノード ソースの組み合わせから、実際のオブジェクト グラフ書き込み操作が可能になります。 XAML スキーマの概念について詳しくは、以下をご覧ください。 「既定の XAML スキーマ コンテキストと WPF XAML スキーマ コンテキストの」を参照してください。

XAML ノード ストリーム、XAML リーダー、XAML ライター

XAML 言語と XAML を言語として使用する特定のテクノロジとの関係で .NET XAML サービスが果たす役割を理解するには、XAML ノード ストリームの概念と、その概念によって API と用語がどのように構成されるかを理解すると役立ちます。 XAML ノード ストリームは、XAML 言語表現と、XAML が表すオブジェクト グラフまたは定義するオブジェクト グラフの概念的な中間です。

  • XAML リーダーは、何らかの形式で XAML を処理し、XAML ノード ストリームを生成するエンティティです。 API では、XAML リーダーは基底クラス XamlReaderによって表されます。

  • XAML ライターは、XAML ノード ストリームを処理し、他のものを生成するエンティティです。 API では、XAML ライターは基底クラス XamlWriterによって表されます。

    XAML に関連する 2 つの最も一般的なシナリオは、XAML を読み込んでオブジェクト グラフをインスタンス化し、アプリケーションまたはツールからオブジェクト グラフを保存し、XAML 表現 (通常はテキスト ファイルとして保存されたマークアップ形式) を生成することです。 XAML の読み込みとオブジェクト グラフの作成は、多くの場合、このドキュメントでは読み込みパスと呼ばれます。 既存のオブジェクト グラフを XAML に保存またはシリアル化することは、多くの場合、このドキュメントでは保存パスと呼ばれます。

    最も一般的な種類のロード パスは、次のように記述できます。

  • まず、UTF エンコードされた XML 形式で XAML 表現を作成し、テキスト ファイルとして保存します。

  • その XAML を XamlXmlReaderに読み込みます。 XamlXmlReaderXamlReader サブクラスです。

  • 結果は XAML ノード ストリームになります。 XamlXmlReader / XamlReader API を使用して、XAML ノード ストリームの個々のノードにアクセスできます。 ここでの最も一般的な操作は、XAML ノード ストリームを進め、"現在のレコード" メタファーを使用して各ノードを処理することです。

  • XAML ノード ストリームから結果のノードを XamlObjectWriter API に渡します。 XamlObjectWriterXamlWriter サブクラスです。

  • XamlObjectWriter は、ソース XAML ノード ストリームの進行状況に応じて、オブジェクト グラフ (一度に 1 つのオブジェクト) を書き込みます。 オブジェクトの書き込みは、XAML スキーマ コンテキストと、バッキング型システムとフレームワークのアセンブリと型にアクセスできる実装の支援を受けて行われます。

  • XAML ノード ストリームの末尾で Result を呼び出して、オブジェクト グラフのルート オブジェクトを取得します。

    保存パスの最も一般的な種類は、次のように記述できます。

  • アプリケーションの実行時全体のオブジェクト グラフ、実行時の UI コンテンツと状態、または実行時のアプリケーション全体のオブジェクト表現の小さなセグメントから始めます。

  • アプリケーション ルートやドキュメント ルートなどの論理開始オブジェクトから、オブジェクトを XamlObjectReaderに読み込みます。 XamlObjectReaderXamlReader サブクラスです。

  • 結果は XAML ノード ストリームになります。 XamlObjectReader API と XamlReader API を使用して、XAML ノード ストリームの個々のノードにアクセスできます。 ここでの最も一般的な操作は、XAML ノード ストリームを進め、"現在のレコード" メタファーを使用して各ノードを処理することです。

  • XAML ノード ストリームから結果のノードを XamlXmlWriter API に渡します。 XamlXmlWriterXamlWriter サブクラスです。

  • XamlXmlWriter は、XML UTF エンコードで XAML を書き込みます。 これは、テキスト ファイル、ストリーム、またはその他の形式で保存できます。

  • Flush を呼び出して、最終的な出力を取得します。

XAML ノード ストリームの概念の詳細については、「XAML ノード ストリームの構造と概念について」を参照してください。

XamlServices クラス

常に XAML ノード ストリームを処理する必要はありません。 基本的な読み込みパスまたは基本的な保存パスが必要な場合は、XamlServices クラスで API を使用できます。

  • Load のさまざまなシグネチャは、読み込みパスを実装します。 ファイルまたはストリームを読み込むか、そのリーダーの API を使用して読み込むことで XAML 入力をラップする XmlReaderTextReader、または XamlReader を読み込むことができます。

  • さまざまなシグネチャ Save オブジェクト グラフを保存し、ストリーム、ファイル、または XmlWriter/TextWriter インスタンスとして出力を生成します。

  • Transform は、読み込みパスと保存パスを 1 つの操作としてリンクすることで XAML を変換します。 XamlReaderXamlWriterには、別のスキーマ コンテキストまたは異なるバッキング型システムを使用できます。これは、結果の XAML の変換方法に影響します。

XamlServicesの使用方法の詳細については、「XAMLServices クラス」および「基本的な XAML 読み取りまたは書き込み」を参照してください。

XAML 型システム

XAML 型システムは、XAML ノード ストリームの特定の個々のノードを操作するために必要な API を提供します。

XamlType はオブジェクトの表現であり、開始オブジェクト ノードと終了オブジェクト ノードの間で処理します。

XamlMember は、開始メンバー ノードと終了メンバー ノードの間で処理するオブジェクトのメンバーの表現です。

GetAllMembersGetMemberDeclaringType などの API は、XamlTypeXamlMemberの関係を報告します。

.NET XAML サービスによって実装される XAML 型システムの既定の動作は、共通言語ランタイム (CLR) と、リフレクションを使用したアセンブリ内の CLR 型の静的分析に基づいています。 そのため、特定の CLR 型の場合、XAML 型システムの既定の実装では、その型とそのメンバーの XAML スキーマを公開し、XAML 型システムの観点から報告できます。 既定の XAML 型システムでは、型の割り当て可能性の概念が CLR 継承にマップされ、インスタンスや値型などの概念も CLR のサポート動作と機能にマップされます。

XAML 言語機能のリファレンス

XAML をサポートするために、.NET XAML サービスは、XAML 言語 XAML 名前空間に対して定義されている XAML 言語の概念の特定の実装を提供します。 これらは、特定の参照ページとして文書化されています。 言語機能は、.NET XAML サービスによって定義された XAML リーダーまたは XAML ライターによって処理されるときに、これらの言語機能がどのように動作するかの観点から説明されています。 詳細については、「XAML 名前空間 (x:) 言語機能の」を参照してください。