次の方法で共有


XamlWriter.Save のシリアル化の制限事項

API Save を使用して、Windows Presentation Foundation (WPF) アプリケーションの内容を拡張アプリケーション マークアップ言語 (XAML) ファイルとしてシリアル化できます。 ただし、シリアル化される内容には注目すべき制限がいくつかあります。 これらの制限事項と一般的な考慮事項については、このトピックで説明します。

実行時の表現 (デザイン時ではなく)

Save の呼び出しによってシリアル化される内容の基本的な哲学は、結果が実行時にシリアル化されるオブジェクトの表現になることです。 元の XAML ファイルのデザイン時プロパティの多くは、XAML がメモリ内オブジェクトとして読み込まれるまでに既に最適化または失われる可能性があり、シリアル化 Save 呼び出しても保持されません。 シリアル化された結果は、アプリケーションの構築された論理ツリーの効果的な表現ですが、必ずしもそれを生成した元の XAML とは限りません。 これらの問題により、広範な XAML デザイン サーフェイスの一部として Save シリアル化を使用することは非常に困難になります。

シリアル化は Self-Contained です。

Save のシリアル化された出力は自己完結型です。シリアル化されるすべてのものが、単一のルート要素を持つ XAML 単一ページ内に含まれており、URI 以外の外部参照はありません。 たとえば、ページがアプリケーション リソースからリソースを参照している場合、これらはシリアル化されるページのコンポーネントであるかのように表示されます。

拡張機能の参照は逆参照される

StaticResourceBindingなど、さまざまなマークアップ拡張形式によって作成されたオブジェクトへの一般的な参照は、シリアル化プロセスによって逆参照されます。 これらは、アプリケーション ランタイムによってメモリ内オブジェクトが作成された時点で既に逆参照されており、Save ロジックは、シリアル化された出力へのこのような参照を復元するために元の XAML を再検討しません。 取得したデータバインドやリソースの値が、実行時の表現において最後に使用された値に固定される可能性があります。この値は、ローカルで設定された他の値と区別する能力が限られているか、間接的にしか行えないことがあります。 また、イメージは、元のソース参照ではなく、プロジェクト内に存在するイメージへのオブジェクト参照としてシリアル化され、最初に参照されていたファイル名または URI が失われます。 同じページ内で宣言されたリソースであっても、リソース コレクションのキーとして保持されるのではなく、参照先のポイントにシリアル化されます。

イベント処理が保持されない

XAML を介して追加されたイベント ハンドラーをシリアル化しても、保持されません。 コード ビハインドのない XAML (および関連する x:Code メカニズムなし) には、ランタイム手続き型ロジックをシリアル化する方法はありません。 シリアル化は自己完結型であり、論理ツリーに限定されているため、イベント ハンドラーを格納するための機能はありません。 その結果、イベント ハンドラー属性 (属性自体とハンドラーに名前を付けます) の両方が出力 XAML から削除されます。

XAMLWriter.Save を使用するための現実的なシナリオ

ここで示す制限はかなり大きくなりますが、シリアル化に Save を使用するための適切なシナリオがいくつかあります。

  • ベクターまたはグラフィカル出力: 再読み込み時に、レンダリング領域の出力を使用して、同じベクターまたはグラフィックスを再現できます。

  • リッチ テキストとフロー ドキュメント: テキストとその中のすべての要素の書式設定と要素の包含は、出力に保持されます。 これは、クリップボードの機能を近似するメカニズムに役立ちます。

  • ビジネス オブジェクト データの保持: ビジネス オブジェクトがカスタム コンストラクターの提供や参照プロパティ値の変換などの基本的な XAML ルールに従っている限り、XML データなどのカスタム要素にデータを格納している場合、これらのビジネス オブジェクトはシリアル化によって永続化できます。