XAMLServices クラスと基本的な XAML の読み取りまたは書き込み
XamlServices は.NET によって提供されるクラスであり、XAML ノード ストリームや、それらのノードから取得した XAML 型システム情報への特定のアクセスを必要としない XAML シナリオに対処するために使用できます。
XamlServices API は、XAML 読み込みパスをサポートする Load
または Parse
、XAML の保存パスをサポートする Save
、読み込みパスと保存パスを結合する手法を提供する Transform
を要約できます。
Transform
を使用して、ある XAML スキーマから別の XAML スキーマに変更できます。 このトピックでは、これらの各 API 分類の概要と、特定のメソッド オーバーロードの違いについて説明します。
負荷
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 の形式のリーダーに依存するオーバーロードです。 これらのオーバーロードを使用するには、既にリーダー インスタンスを作成し、その Create
API を使用して、関連する形式 (テキストまたは XML) で XAML を読み込んでいる必要があります。 他のリーダーでレコード ポインターを既に移動している場合や、他のリーダーで他の操作を実行している場合、これは重要ではありません。
Load からの読み込みパス ロジックは、常にルートダウンからの XAML 入力全体を処理します。 次のシナリオでは、これらのオーバーロードの使用が保証される場合があります。
既存の XML 固有のテキスト エディターから単純な XAML 編集機能を提供するデザイン サーフェイス。
コア System.IO シナリオのバリエーション。専用リーダーを使用してファイルまたはストリームを開きます。 ロジックは、XAML として読み込もうとする前に、コンテンツの基本的なチェックまたは処理を実行します。
ファイルまたはストリームを読み込むか、リーダーの API を使用して読み込むことで XAML 入力をラップする XmlReader、TextReader、または XamlReader を読み込むことができます。
内部的には、上記の各オーバーロードは最終的に Load(XmlReader)され、渡された XmlReader を使用して新しい XamlXmlReaderが作成されます。
より高度なシナリオに対応する Load
署名が Load(XamlReader)。 この署名は、次のいずれかの場合に使用できます。
XamlReaderの独自の実装を定義しました。
既定の設定とは異なる XamlReader の設定を指定する必要があります。
既定以外の設定の例:
AllowProtectedMembersOnRoot
BaseUri
IgnoreUidsOnPropertyElements
LocalAssembly
ValuesMustBeString.
XamlServices の既定のリーダーは XamlXmlReaderです。 独自の XamlXmlReader に設定を指定した場合、既定以外の XamlXmlReaderSettingsを設定するプロパティを次に示します。
CloseInput
SkipXmlCompatibilityProcessing
XmlLang
XmlSpacePreserve
パーズ
Parse は、XAML 入力から XAML ノード ストリームを作成するロード パス API であるため、Load
のようなものです。 ただし、この場合、XAML 入力は、読み込むすべての XAML を含む文字列として直接提供されます。
Parse は、フレームワーク シナリオよりもアプリケーション シナリオに適した軽量アプローチです。 詳細については、Parseを参照してください。
Parse は、内部的に StringReader を伴うラップされた Load(XmlReader) 呼び出しです。
セーブ
Save のさまざまなオーバーロードによって、保存パスが実装されます。 すべての Save メソッドはすべて、オブジェクト グラフを入力として受け取り、ストリーム、ファイル、または XmlWriter/TextWriter インスタンスとして出力を生成します。
入力オブジェクトは、何らかのオブジェクト表現のルート オブジェクトであることが期待されます。 これは、ビジネス オブジェクトの単一ルート、UI シナリオのページのオブジェクト ツリーのルート、デザイン ツールの作業編集画面、またはシナリオに適したその他のルート オブジェクトの概念です。
多くのシナリオでは、保存するオブジェクト ツリーは、Load またはフレームワーク/アプリケーション モデルによって実装された他の API を使用して XAML を読み込んだ元の操作に関連しています。 状態の変更、アプリケーションがユーザーからランタイム設定をキャプチャした場所の変更、アプリケーションが XAML デザイン サーフェイスであるために XAML を変更したことなどが原因で、オブジェクト ツリーにキャプチャされる違いがある可能性があります。変更の有無にかかわらず、最初にマークアップから XAML を読み込んでから保存し、2 つの XAML マークアップ フォームを比較する概念は、XAML のラウンドトリップ表現と呼ばれることもあります。
マークアップ形式で設定された複雑なオブジェクトを保存してシリアル化する場合の課題は、情報を失うことなく完全な表現を実現することと、XAML を人間が読みにくくする詳細性のバランスを実現することです。 さらに、XAML の顧客によって、そのバランスを設定する方法に関する定義や期待が異なる場合があります。 Save API は、その残高の 1 つの定義を表します。 Save API は、使用可能な XAML スキーマ コンテキストと、XamlType、XamlMember、およびその他の XAML 組み込みおよび XAML 型システムの概念の既定の CLR ベースの特性を使用して、特定の XAML ノード ストリーム コンストラクトをマークアップに保存するときに最適化できる場所を決定します。 たとえば、保存パス XamlServices CLR ベースの既定の XAML スキーマ コンテキストを使用してオブジェクトの XamlType を解決し、XamlType.ContentPropertyを決定し、オブジェクトの XAML コンテンツにプロパティを書き込むときにプロパティ要素タグを省略できます。
変形する
Transform は、読み込みパスと保存パスを 1 つの操作としてリンクすることで、XAML を変換または変換します。 XamlReader と XamlWriterには、別のスキーマ コンテキストまたは異なるバッキング型システムを使用できます。これは、結果の XAML の変換方法に影響します。 これは、広範な変換操作に適しています。
XAML ノード ストリーム内の各ノードを調べることに依存する操作の場合、通常、Transformは使用しません。 代わりに、独自のロード パス保存パス操作シリーズを定義し、独自のロジックを組み込む必要があります。 いずれかのパスで、独自のノード ループの周りに XAML リーダーと XAML ライターのペアを使用します。 たとえば、XamlXmlReader を使用して初期 XAML を読み込み、連続する Read 呼び出しでノードにステップ インします。 XAML ノード ストリーム レベルで動作し、個々のノード (型、メンバー、その他のノード) を調整して変換を適用したり、ノードを as-isしたままにしたりできます。 次に、ノードを XamlObjectWriter の関連する Write
API に送信し、オブジェクトを書き出します。 詳細については、「XAML ノード ストリームの構造と概念について」を参照してください。
関連項目
- XamlObjectWriter
- XamlServices
- XAML サービス の
.NET Desktop feedback