次の方法で共有


WPF のドキュメント

Windows Presentation Foundation (WPF) には、以前の世代の Windows よりも簡単にアクセスして読み取ることができる、忠実度の高いコンテンツの作成を可能にする、さまざまなドキュメント機能が用意されています。 WPF は、強化された機能と品質に加えて、ドキュメントの表示、パッケージ化、およびセキュリティのための統合サービスも提供します。 このトピックでは、WPF ドキュメントの種類とドキュメント パッケージの概要について説明します。

ドキュメントの種類

WPF は、ドキュメントを意図した用途に基づいて 2 つの大きなカテゴリに分割します。これらのドキュメント カテゴリは、"固定ドキュメント" と "フロー ドキュメント" と呼びます。

固定ドキュメントは、使用するディスプレイまたはプリンター ハードウェアに関係なく、正確な "表示内容" (WYSIWYG) プレゼンテーションを必要とするアプリケーションを対象としています。 固定ドキュメントの一般的な用途には、元のページ デザインへの準拠が重要なデスクトップ発行、ワープロ、フォーム レイアウトなどがあります。 固定ドキュメントは、レイアウトの一部として、使用中のディスプレイまたは印刷デバイスに関係なく、コンテンツ要素の正確な位置配置を維持します。 たとえば、96 dpi ディスプレイで表示される固定ドキュメント ページは、600 dpi レーザー プリンターに出力する場合と、4800 dpi フォトタイプセッターに出力する場合とまったく同じように表示されます。 ページ レイアウトはすべてのケースで同じままですが、ドキュメントの品質は各デバイスの機能を最大化します。

これに対して、フロー ドキュメントは表示と読みやすさを最適化するように設計されており、読みやすさがドキュメントの主要な使用シナリオである場合に最適に利用されます。 フロー ドキュメントは、1 つの定義済みのレイアウトに設定されるのではなく、ウィンドウ サイズ、デバイスの解像度、オプションのユーザー設定などの実行時変数に基づいて、コンテンツを動的に調整およびリフローします。 Web ページは、現在のウィンドウに合わせてページ コンテンツが動的に書式設定されるフロー ドキュメントの簡単な例です。 フロー ドキュメントは、ランタイム環境に基づいて、ユーザーの表示と読み取りエクスペリエンスを最適化します。 たとえば、同じフロー ドキュメントが動的に再フォーマットされ、高解像度の 19 インチ ディスプレイまたは小さな 2x3 インチ PDA 画面で最適な読みやすさが得られます。 さらに、フロー ドキュメントには、検索、読みやすさを最適化する表示モード、フォントのサイズと外観を変更する機能など、多くの組み込み機能があります。 フロー ドキュメントの図、例、詳細については、「フロー ドキュメントの概要」を参照してください。

ドキュメント コントロールとテキスト レイアウト

.NET Framework には、固定ドキュメント、フロー ドキュメント、およびアプリケーション内の一般的なテキストの使用を簡略化する一連の事前構築済みコントロールが用意されています。 固定ドキュメント コンテンツの表示は、 DocumentViewer コントロールを使用してサポートされます。 フロー ドキュメントコンテンツの表示は、さまざまなユーザー シナリオにマップする FlowDocumentReaderFlowDocumentPageViewerFlowDocumentScrollViewer の 3 つの異なるコントロールでサポートされています (以下のセクションを参照)。 その他の WPF コントロールは、一般的なテキストの使用をサポートするための簡略化されたレイアウトを提供します (後述 の「ユーザー インターフェイスのテキスト」を参照)。

固定ドキュメント コントロール - DocumentViewer

DocumentViewer コントロールは、コンテンツFixedDocument表示するように設計されています。 DocumentViewer コントロールは、印刷出力、クリップボードへのコピー、ズーム、テキスト検索機能などの一般的な操作を組み込んだサポートを提供する直感的なユーザー インターフェイスを提供します。 このコントロールは、使い慣れたスクロール メカニズムを使用してコンテンツのページにアクセスできます。 すべての WPF コントロールと同様に、 DocumentViewer では完全または部分的なリスタイル設定がサポートされています。これにより、コントロールを実質的に任意のアプリケーションまたは環境に視覚的に統合できます。

DocumentViewer は、読み取り専用の方法でコンテンツを表示するように設計されています。コンテンツの編集または変更は使用できません。また、サポートされていません。

フロー ドキュメント コントロール

フロー ドキュメント機能とその作成方法の詳細については、「 フロー ドキュメントの概要」を参照してください。

フロー ドキュメントコンテンツの表示は、 FlowDocumentReaderFlowDocumentPageViewerFlowDocumentScrollViewerの 3 つのコントロールでサポートされています。

フロードキュメントリーダー

FlowDocumentReader には、単一ページ (ページ時) 表示モード、2 ページ同時 (書籍の閲覧形式) 表示モード、連続スクロール (ボトムレス) 表示モードなど、さまざまな表示モードを動的に選択できる機能が含まれています。 これらの表示モードの詳細については、「FlowDocumentReaderViewingMode」を参照してください。 異なる表示モードを動的に切り替える必要がない場合は、FlowDocumentPageViewerFlowDocumentScrollViewer、特定の表示モードで固定された軽量のフロー コンテンツ ビューアーを提供します。

FlowDocumentPageViewer と FlowDocumentScrollViewer

FlowDocumentPageViewer はコンテンツをページ時表示モードで表示し、FlowDocumentScrollViewer は連続スクロール モードでコンテンツを表示します。 FlowDocumentPageViewerFlowDocumentScrollViewer の両方が特定の表示モードに固定されています。 FlowDocumentReaderと比較します。これには、ユーザーがさまざまな表示モード (FlowDocumentReaderViewingMode 列挙によって提供される) から動的に選択できるようにする機能が含まれます。FlowDocumentPageViewerFlowDocumentScrollViewerよりもリソースを集中的に消費する必要があります。

既定では、垂直スクロール バーが常に表示され、必要に応じて水平スクロール バーが表示されます。 FlowDocumentScrollViewer の既定の UI にはツール バーは含まれません。ただし、IsToolBarVisible プロパティを使用して、組み込みのツール バーを有効にすることができます。

ユーザー インターフェイスのテキスト

ドキュメントにテキストを追加するだけでなく、フォームなどのアプリケーション UI でテキストを使用できることは明らかです。 WPF には、画面にテキストを描画するための複数のコントロールが含まれています。 各コントロールは異なるシナリオを対象としており、独自の機能と制限の一覧があります。 一般に、TextBlock 要素は、ユーザー インターフェイス (UI) の簡単な文など、限られたテキストサポートが必要な場合に使用する必要があります。 Label は、最小限のテキストサポートが必要な場合に使用できます。 詳細については、「 TextBlock の概要」を参照してください。

ドキュメント のパッケージ化

System.IO.Packaging API は、アクセスが簡単で、移植性が高く、配布が簡単な 1 つのコンテナーで、アプリケーション データ、ドキュメント コンテンツ、および関連リソースを効率的に整理する手段を提供します。 ZIP ファイルは、複数のオブジェクトを 1 つの単位として保持できる Package 型の例です。 パッケージ化 API は、XML および ZIP ファイル アーキテクチャで Open Packaging Conventions 標準を使用して設計された既定の ZipPackage 実装を提供します。 WPF パッケージ API を使用すると、パッケージを簡単に作成し、その中にオブジェクトを格納してアクセスできます。 Packageに格納されているオブジェクトは、PackagePart ("part") と呼ばれます。 パッケージには、パーツの発信元を識別し、パッケージの内容が変更されていないことを検証するために使用できる署名付きデジタル証明書を含めることもできます。 パッケージには、既存のパーツの内容を実際に変更することなく、パッケージに追加情報を追加したり、特定のパーツに関連付けたりできる PackageRelationship 機能も含まれています。 パッケージ サービスでは、Microsoft Windows Rights Management (RM) もサポートされます。

WPF パッケージ アーキテクチャは、多くの主要なテクノロジの基盤として機能します。

  • XML Paper Specification (XPS) に準拠している XPS ドキュメント。

  • Microsoft Office "12" オープン XML 形式のドキュメント (.docx)。

  • 独自のアプリケーション設計用のカスタム ストレージ形式。

パッケージ化 API に基づいて、 XpsDocument は WPF の固定コンテンツ ドキュメントを格納するために特別に設計されています。 XpsDocumentは、ビューアーで開いたり、DocumentViewer コントロールに表示したり、印刷スプールにルーティングしたり、XPS 互換プリンターに直接出力したりできる自己完結型のドキュメントです。

以降のセクションでは、WPF で提供される Package API と XpsDocument API に関する追加情報を提供します。

パッケージ コンポーネント

WPF パッケージ API を使用すると、アプリケーション データとドキュメントを 1 つのポータブル ユニットに編成できます。 ZIP ファイルは最も一般的なパッケージの種類の 1 つであり、WPF で提供される既定のパッケージの種類です。 Package 自体は、オープン標準の XML および ZIP ファイル アーキテクチャを使用して ZipPackage が実装される抽象クラスです。 Openメソッドでは、既定で ZipPackage を使用して ZIP ファイルを作成して使用します。 パッケージには、次の 3 種類の基本的な項目を含めることができます。

アイテム 説明
PackagePart アプリケーション コンテンツ、データ、ドキュメント、およびリソース ファイル。
PackageDigitalSignature 識別、認証、検証用の [X.509 証明書]。
PackageRelationship パッケージまたは特定のパーツに関連する情報を追加しました。

パッケージ部品

PackagePart ("part") は、Packageに格納されているオブジェクトを参照する抽象クラスです。 ZIP ファイルでは、パッケージ パーツは ZIP ファイル内に格納されている個々のファイルに対応します。 ZipPackagePart は、 ZipPackageに格納されているシリアル化可能なオブジェクトの既定の実装を提供します。 ファイル システムと同様に、パッケージに含まれるパーツは階層ディレクトリまたは "フォルダー スタイル" 組織に格納されます。 WPF パッケージ API を使用すると、アプリケーションは 1 つの ZIP ファイル コンテナーを使用して、複数の PackagePart オブジェクトを書き込み、格納、読み取ることができます。

パッケージデジタル署名

セキュリティのために、 PackageDigitalSignature ("デジタル署名") をパッケージ内のパーツに関連付けることができます。 PackageDigitalSignatureには、次の 2 つの機能を提供する [509] が組み込まれています。

  1. パーツの発信元を識別して認証します。

  2. パーツが変更されていないことを検証します。

デジタル署名はパーツの変更を妨げませんが、パーツが何らかの方法で変更された場合、デジタル署名に対する検証チェックは失敗します。 その後、アプリケーションは適切なアクションを実行できます。たとえば、パーツを開くのをブロックしたり、パーツが変更され、セキュリティで保護されていないことをユーザーに通知したりできます。

パッケージリレーションシップス

PackageRelationship ("リレーションシップ") は、パッケージまたはパッケージ内のパーツに追加情報を関連付けるためのメカニズムを提供します。 リレーションシップは、実際のパーツコンテンツを変更することなく、追加情報をパーツに関連付けることができるパッケージレベルの機能です。 多くの場合、新しいデータをパーツ コンテンツに直接挿入することは、通常は実用的ではありません。

  • パーツとそのコンテンツ スキーマの実際の型が不明です。

  • 既知の場合でも、コンテンツ スキーマは新しい情報を追加するための手段を提供しない可能性があります。

  • パーツはデジタル署名または暗号化され、変更が除外される可能性があります。

パッケージリレーションシップは、個々のパーツまたはパッケージ全体に追加情報を追加および関連付けするための検出可能な手段を提供します。 パッケージ リレーションシップは、次の 2 つの主要な関数に使用されます。

  1. あるパーツから別のパーツへの依存関係の定義。

  2. パーツに関連するメモやその他のデータを追加する情報リレーションシップを定義する。

PackageRelationshipは、依存関係を定義し、パッケージまたはパッケージ全体の一部に関連付けられているその他の情報を追加するための、すばやく検出可能な手段を提供します。

依存関係

依存関係は、ある部分が他のパーツに対して行う依存関係を記述するために使用されます。 たとえば、パッケージには、1 つ以上の <img> イメージ タグを含む HTML パーツが含まれている場合があります。 イメージ タグは、パッケージ内部の他のパーツとして、またはパッケージの外部 (インターネット経由でアクセス可能など) として配置されているイメージを参照します。 HTML ファイルに関連付けられた PackageRelationship を作成すると、依存リソースの検出とアクセスが迅速かつ簡単になります。 ブラウザーまたはビューアー アプリケーションは、パーツのリレーションシップに直接アクセスし、スキーマを知ったりドキュメントを解析したりすることなく、依存リソースのアセンブルをすぐに開始できます。

情報リレーションシップ

メモや注釈と同様に、 PackageRelationship を使用して、パーツコンテンツ自体を実際に変更することなく、パーツに関連付ける他の種類の情報を格納することもできます。

XPS ドキュメント

XML Paper Specification (XPS) ドキュメントは、1 つ以上の固定ドキュメントと、レンダリングに必要なすべてのリソースと情報を含むパッケージです。 XPS は、Windows Vista のネイティブ印刷スプール ファイル形式でもあります。 XpsDocumentは標準の ZIP データセットに格納され、画像ファイルやフォント ファイルなどの XML コンポーネントとバイナリ コンポーネントの組み合わせを含めることができます。 PackageRelationship は 、コンテンツとドキュメントを完全にレンダリングするために必要なリソース間の依存関係を定義するために使用されます。 XpsDocument設計では、複数の用途をサポートする 1 つの忠実度の高いドキュメント ソリューションが提供されます。

  • 固定ドキュメントのコンテンツとリソースの読み取り、書き込み、保存を、1 つの移植性があり、配布しやすいファイルとして行います。

  • XPS ビューアー アプリケーションを使用してドキュメントを表示する。

  • Windows Vista のネイティブ印刷スプール出力形式でドキュメントを出力する。

  • XPS 互換プリンターにドキュメントを直接ルーティングする。

こちらも参照ください