XAMLServices クラスおよび基本的な XAML の読み取りまたは書き込み

XamlServices は .NET Framework XAML サービスによって提供されるクラスであり、XAML ノード ストリーム、またはこれらのノードから取得された XAML 型システム情報へのアクセスを必要としない XAML シナリオに対応するために使用されます。 要約すると、XamlServices API は次のように説明できます。Load または Parse で XAML 読み込みパスをサポートし、Save で XAML 保存パスをサポートし、Transform で読み込みパスと保存パスを連結する方法を指定します。 Transform は、XAML スキーマを別の XAML スキーマに変換するために使用されます。 このトピックでは、それぞれの API 分類についてまとめ、特定のメソッド オーバーロード間の相違点について説明します。

このトピックは、次のセクションで構成されています。

  • Load
  • Parse
  • Save
  • Transform
  • 関連トピック

Load

Load のさまざまなオーバーロードは、読み込みパスのロジック全体を実装しています。 読み込みパスは、ある形式の XAML を使用して XAML ノード ストリームを出力します。 これらの読み込みパスのほとんどは、エンコードされた XML テキスト ファイル形式で XAML を使用します。 ただし、一般的なストリームを読み込むことも、異なる XamlReader 実装に既に含まれているプリロード済みの XAML ソースを読み込むこともできます。

ほとんどのシナリオにおいて最もシンプルなオーバーロードとは、Load(String) です。 このオーバーロードには、読み込まれる XAML を含むテキスト ファイル名を表す fileName パラメーターがあります。 これは、以前にシリアル化された状態またはローカル コンピューターへのデータを持つ、完全信頼アプリケーションなどのアプリケーション シナリオに適しています。 さらに、アプリケーション モデルを定義しており、アプリケーション動作、開始 UI、またはフレームワークによって定義された、XAML を使用するその他の機能を定義する標準ファイルを 1 つ読み込む場合にも便利です。

Load(Stream) にも、類似したシナリオがあります。 Stream は、ファイル システムにアクセスできるその他の System.IO API の出力として頻出するため、ユーザーが読み込むファイルを選択する場合には、このオーバーロードが便利です。 または、非同期ダウンロードや、ストリームを生成するその他のネットワーク技術を使用し、XAML ソースにアクセスすることもできます。 ストリームまたはユーザーが選択したソースからの読み込みは、セキュリティに影響を及ぼす可能性があります。 詳細については、「XAML セキュリティの考慮事項」を参照してください。

Load(TextReader) および Load(XmlReader) は、以前のバージョンの .NET Framework の形式のリーダーに依存するオーバーロードです。 これらのオーバーロードを使用するには、あらかじめリーダー インスタンスを作成し、その Create API を使用して XAML を関連フォーム (テキストまたは XML) に読み込む必要があります。 その他のリーダーのレコード ポインターを既に移動した場合、またはレコード ポインターを使用して他の操作を実行した場合は、これは重要ではありません。 Load からの読み込みパス ロジックは、常にルート以下のすべての XAML 入力を処理します。 これらのオーバーロードのシナリオとしては、次のようなものが挙げられます。

  • 既存の XML 固有のテキスト エディターのシンプルな XAML 編集機能を使用できるデザイン サーフェイス。

  • 専用のリーダーを使用してファイルやストリームを開く、コア System.IO の派生シナリオ。 ロジックで、XAML として読み込む前にコンテンツの基本的なチェックや処理を実行します。

ファイルまたはストリームを読み込むか、リーダーの API で読み込むことによって XAML 入力をラップする XmlReaderTextReader、または XamlReader を読み込むことができます。

内部的には、上に示した各オーバーロードは最終的に Load(XmlReader) であり、渡された XmlReader を使用して新しい XamlXmlReader を作成します。

より高度なシナリオ用の Load シグネチャは、Load(XamlReader) です。 このシグネチャを、次のいずれかのケースで使用できます。

  • XamlReader の独自の実装を定義した場合。

  • 既定の設定とは異なる XamlReader の設定を指定する必要がある場合。

既定以外の設定の例: AllowProtectedMembersOnRootBaseUriIgnoreUidsOnPropertyElementsLocalAssemblyValuesMustBeStringXamlServices の既定のリーダーは XamlXmlReader です。 独自の XamlXmlReader を、設定を含めて指定する場合は、XamlXmlReaderSettingsCloseInputSkipXmlCompatibilityProcessingXmlLangXmlSpacePreserve が既定以外に設定されます。

Parse

Parse は、XAML 入力から XAML ノード ストリームを作成する読み込みパス API であるため、Load に似ています。 ただしこの場合は、XAML 入力は、読み込まれる XAML 全体を含む文字列として直接指定されます。 Parse は軽量のアプローチであり、フレームワーク シナリオよりもアプリケーション シナリオにより適しています。 詳細については、「Parse」を参照してください。 実際には、Parse は、StringReader を内部的に使用する、ラップされた Load(XmlReader) 呼び出しです。

Save

Save のさまざまなオーバーロードは、保存パスを実装しています。 どの Save メソッドもオブジェクト グラフを入力として取り、ストリーム、ファイル、または XmlWriter/TextWriter インスタンスとして出力を生成します。

入力オブジェクトは、なんらかのオブジェクト表現のルート オブジェクトであることが予期されます。 ビジネス オブジェクトの単一ルート、UI シナリオ内のページのオブジェクト ツリーのルート、デザイン ツールの作業用の編集サーフェイス、またはシナリオに適したその他のルート オブジェクト概念である可能性があります。

多くのシナリオでは、保存されるオブジェクト ツリーは、Load またはフレームワーク/アプリケーション モデルによって実装されたその他の API で XAML をロードした元の操作に関連しています。 状態の変更、アプリケーションがユーザーからランタイムの設定をキャプチャした場合の変更、アプリケーションが XAML デザイン サーフェイスなどであるために起こる XAML の変更などにより、オブジェクト ツリーに相違点が見られることもあります。 変更の有無にかかわらず、まずマークアップから XAML を読み込んで再保存し、2 つのマークアップ フォームを比較するという概念は、XAML のラウンド トリップという表現で示される場合があります。

マークアップ形式で設定された複合オブジェクトの保存とシリアル化に伴う課題とは、完全な表現によって情報を失われないようにすることと、XAML が詳細すぎてユーザーが判読しにくい状態になることとの間のバランスを確保することです。 さらに、XAML を使用する顧客が異なれば、このバランスをどのように取るかの定義や要求も異なることがあります。 Save API は、このバランスの定義を 1 つ表します。 Save API は、使用できる XAML スキーマ コンテキストと、XamlTypeXamlMember の既定の CLR ベースの特性、およびその他の組み込み XAML と XAML 型システムの概念を使用し、ある XAML ノード ストリーム構造をマークアップに再保存したときに、どこで最適化するかを決定します。 たとえば、XamlServices 保存パスは、CLR ベースの既定の XAML スキーマ コンテキストを使用してオブジェクトの XamlType を解決し、XamlType.ContentProperty を決定したうえで、このオブジェクトの XAML コンテンツにプロパティを記述するときにプロパティ要素タグを省略できます。

Transform

Transform は、読み込みパスと保存パスを単独の操作としてリンクすることによって、XAML を変換します。 XamlReader および XamlWriter に対して異なるスキーマ コンテキストまたは異なるバッキング型システムを使用できます。これは、結果として生成される XAML がどのように変換されるかに影響します。 これは、広範な変換操作で効果を発揮します。

XAML ノード ストリームの各ノードの確認に依存する操作については、通常、Transform は使用しません。 代わりに、読み込みパス - 保存パスの一連の操作を独自に定義し、独自のロジックを挿入する必要があります。 いずれかのパスで、独自のノード ループの周辺で XAML リーダー/XAML ライターのペアを使用します。 たとえば、XamlXmlReader を使用し、最初の XAML を読み込み、Read を連続的に呼び出し、ノードにステップ インします。 XAML ノード ストリーム レベルの操作では、個々のノード (型、メンバー、その他のノード) を調整し、変換を適用するか、ノードをそのままにしておくことができます。 その後、ノードを XamlObjectWriter の関連 Write API に送信し、オブジェクトを記述します。 詳細については、「XAML ノード ストリームの構造と概念について」を参照してください。

参照

参照

XamlObjectWriter

XamlServices

その他の技術情報

XAML サービス