WPF のドキュメント
Windows Presentation Foundation (WPF) は、Windows の前の世代よりも簡単にアクセスおよび読み取りを行うことができるように設計されている、忠実性の高いコンテンツの作成を可能にするさまざまなドキュメント機能を提供します。 拡張された機能と品質に加えて、WPF は、ドキュメントの表示、パッケージ化、およびセキュリティの統合されたサービスも提供します。 ここでは、WPF のドキュメントの種類とドキュメントのパッケージ化の概要を説明します。
このトピックは、次のセクションで構成されています。
- ドキュメントの種類
- ドキュメント コントロールおよびテキスト レイアウト
- ドキュメントのパッケージ化
- XPS ドキュメント
- 関連トピック
ドキュメントの種類
WPF では、ドキュメントは用途に基づいて大きく 2 つのカテゴリに分けられます。これらのドキュメントのカテゴリは "固定ドキュメント" および "フロー ドキュメント" と呼ばれます。
固定ドキュメントは、使用されるディスプレイまたはプリンター ハードウェアに関係なく、正確な "what you see is what you get" (WYSIWYG) プレゼンテーションを必要とするアプリケーションを対象に用意されています。 固定ドキュメントの一般的な用途としては、元のページ デザインに準拠していることが重要になるデスクトップ パブリッシング、ワード プロセッシング、およびフォーム レイアウトなどがあります。 レイアウトの一部として、固定ドキュメントでは、使用中のディスプレイまたは印刷デバイスに依存しないコンテンツ要素の正確な配置位置が保持されます。 たとえば、96 dpi のディスプレイに表示される固定ドキュメント ページは、600 dpi のレーザー プリンターに出力される場合に、4800 dpi の写真植字に出力される場合とまったく同じように表示されます。 ドキュメントの品質は各デバイスの機能に応じて最大化されますが、ページ レイアウトはすべての場合において同じになります。
これに対して、フロー ドキュメントは、表示と読みやすさを最適化するように設計されており、ドキュメントが主に読みやすさを目的としている場合に最適です。 フロー ドキュメントは、1 つの定義済みのレイアウトに設定するのではなく、ウィンドウのサイズ、デバイスの解像度、省略可能なユーザー設定など、ランタイム変数に基づいてコンテンツを動的に調整したり再配置したりします。 Web ページは、そのコンテンツが現在のウィンドウに収まるように動的にフォーマットされるフロー ドキュメントの簡単な例です。 フロー ドキュメントは、ランタイム環境に基づいて、ユーザーにとっての表示と読みやすさを最適化します。 たとえば、同じフロー ドキュメントでも、高解像度の 19 インチ ディスプレイなのか、小型の 2x3 インチの PDA 画面なのかに応じて、最も読みやすくなるように書式設定が動的に変更されます。 また、フロー ドキュメントには、検索機能や、読みやすさを最適化する表示モード、フォントのサイズと外観を変更する機能など、さまざまな機能が組み込まれています。 フロー ドキュメントの図、例、および詳細については、「フロー ドキュメントの概要」を参照してください。
ドキュメント コントロールおよびテキスト レイアウト
.NET Framework には、アプリケーション内の固定ドキュメント、フロー ドキュメント、および一般的なテキストの使用を簡略化する、事前にビルドされたコントロールのセットが用意されています。 固定ドキュメントのコンテンツの表示は、DocumentViewer コントロールを使用してサポートされます。 フロー ドキュメントのコンテンツの表示は、異なるユーザー シナリオに割り当てられている FlowDocumentReader、FlowDocumentPageViewer、および FlowDocumentScrollViewer という 3 つの異なるコントロールによってサポートされます (後のセクションを参照してください)。 その他の WPF コントロールでは、一般的なテキストの使用をサポートする簡略化されたレイアウトが提供されます (後の「ユーザー インターフェイスのテキスト」を参照してください)。
固定ドキュメント コントロール - DocumentViewer
DocumentViewer コントロールは FixedDocument コンテンツを表示するように設計されています。 DocumentViewer コントロールは、印刷出力、クリップボードへのコピー、拡大、およびテキスト検索の機能を含む共通の操作へのサポートが組み込まれている直感的なユーザー インターフェイスを提供します。 コントロールは、使い慣れたスクロール機構を使用してコンテンツのページへのアクセスを提供します。 すべての WPF コントロールと同様に、DocumentViewer は、事実上すべてのアプリケーションまたは環境に視覚的にコントロールを統合できるようにする、完全なスタイル変更または一部のスタイル変更をサポートします。
DocumentViewer は、読み取り専用の形でコンテンツを表示するように設計されています。コンテンツの編集または変更は行うことはできず、サポートされていません。
フロー ドキュメント コントロール
メモ : フロー ドキュメント機能の詳細、およびフロー ドキュメントの作成方法については、「フロー ドキュメントの概要」を参照してください。
フロー ドキュメントのコンテンツの表示は、FlowDocumentReader、FlowDocumentPageViewer、および FlowDocumentScrollViewer という 3 つのコントロールによってサポートされます。
FlowDocumentReader
FlowDocumentReader には、単一ページ (一度に 1 ページ) 表示モード、2 ページ (読書形式) 表示モード、連続スクロール (ボトムレス) 表示モードなど、さまざまな表示モードをユーザーが動的に選択できるようにするための機能が用意されています。 これらの表示モードの詳細については、FlowDocumentReaderViewingMode を参照してください。 表示モードを動的に切り替える必要がない場合は、FlowDocumentPageViewer および FlowDocumentScrollViewer を使用すると便利です。これらは、特定の表示モードに固定された軽量のコンテンツ ビューアーです。
FlowDocumentPageViewer と FlowDocumentScrollViewer
FlowDocumentPageViewer は、コンテンツを一度に 1 ページずつ表示し、FlowDocumentScrollViewer はコンテンツを連続したスクロール モードで表示します。 FlowDocumentPageViewer および FlowDocumentScrollViewer は、いずれも特定の表示モードに固定されています。 FlowDocumentReader と比較してください。このリーダーでは、FlowDocumentReaderViewingMode 列挙体により各種表示モードを動的に切り替えることができますが、FlowDocumentPageViewer や FlowDocumentScrollViewer よりも多くのリソースを消費します。
既定では、垂直スクロール バーは常に表示され、水平スクロール バーは必要に応じて表示されます。 FlowDocumentScrollViewer の既定の UI にはツール バーが含まれませんが、IsToolBarVisible プロパティを使用して組み込みツール バーを有効にできます。
ユーザー インターフェイスのテキスト
ドキュメントへのテキストの追加だけでなく、テキストはもちろん、フォームなどのアプリケーション UI で使用できます。 WPF には、画面にテキストを描画するための複数のコントロールが含まれています。 各コントロールは、異なるシナリオを対象にしており、それぞれに一連の機能と制限があります。 一般的に、user interface (UI) で短い文を使用するなど、限定的なテキストのサポートが必要な場合は、TextBlock 要素を使用する必要があります。 最小限のテキスト サポートが必要な場合には、Label を使用できます。 詳細については、「TextBlock の概要」を参照してください。
ドキュメントのパッケージ化
System.IO.Packaging の APIs は、簡単にアクセスでき、移植可能で、配布しやすい単一のコンテナー内のアプリケーション データ、ドキュメント コンテンツ、および関連リソースを編成するための効率的な方法を提供します。 ZIP ファイルは、複数のオブジェクトを 1 つの単位として保持することができる Package の種類の 1 例です。 パッケージ化の APIs は、XML ファイルおよび ZIP ファイル アーキテクチャと共に Open Packaging Conventions 標準を使用して、既定の ZipPackage 実装を提供します。 WPF のパッケージ化 APIs は、パッケージの作成、およびパッケージへのオブジェクトの格納とそれらのオブジェクトへのアクセスを簡単にします。 Package に格納されたオブジェクトは PackagePart ("パーツ") と呼ばれます。 パッケージには、パーツの発行元を識別し、パッケージのコンテンツが変更されていないことを検証するのに使用できる署名されたデジタル証明書を含めることもできます。 パッケージには、追加情報をパッケージに追加できたり、既存のパーツのコンテンツを実際に変更することなく特定のパーツに関連付けたりすることができる、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 および XpsDocument APIs について追加情報を示します。
パッケージ コンポーネント
WPF パッケージ化 API は、アプリケーション データとドキュメントを 1 つの移植可能な単位に編成できるようにします。 ZIP ファイルは、最もよく使用されるパッケージの種類の 1 つであり、WPF で用意されている既定のパッケージの種類です。 Package 自体は、ZipPackage が標準のオープン XML および ZIP ファイル アーキテクチャを使用して実装される元となる抽象クラスです。 Open メソッドは、既定では ZipPackage を使用して ZIP ファイルを作成および使用します。 パッケージには、次の 3 種類の基本的な項目を含めることができます。
アプリケーション コンテンツ、データ、ドキュメント、およびリソース ファイル。 |
|
識別、認証、および検証のための X.509 証明書。 |
|
パッケージまたは特定のパーツに関連する追加された情報。 |
PackageParts
PackagePart ("パーツ") は Package に格納されたオブジェクトを参照する抽象クラスです。 ZIP ファイルでは、パッケージ パーツは ZIP ファイル内に格納された個別のファイルに対応します。 ZipPackagePart は、ZipPackage 内に格納されるシリアル化可能なオブジェクトに対する既定の実装を提供します。 ファイル システムと同様に、パッケージに含まれているパーツは、階層的ディレクトリまたは "フォルダー スタイル" 編成で格納されます。 WPF パッケージ化 API を使用すると、アプリケーションは、単一の ZIP ファイル コンテナーを使用して、複数の PackagePart オブジェクトの書き込み、格納、および読み取りを行うことができます。
PackageDigitalSignatures
セキュリティ保護のために、パッケージ内のパーツに PackageDigitalSignature ("デジタル署名") を関連付けることができます。 PackageDigitalSignature には、次の 2 つの機能を提供する 509 が組み込まれています。
パーツの発行元を識別および認証します。
パーツが変更されていないことを検証します。
デジタル署名はパーツを変更できなくするものではありません。しかし、パーツが何らかの方法で変更されている場合、デジタル署名に対する検証チェックは失敗します。 その後、アプリケーションでは適切なアクションを実行することができます。たとえば、パーツを開く操作をブロックしたり、パーツが変更されていて安全ではないことをユーザーに知らせたりすることができます。
PackageRelationships
PackageRelationship ("リレーションシップ") は、追加情報をパッケージまたはパッケージ内のパーツに関連付けるための機構を提供します。 リレーションシップは、実際のパーツのコンテンツを変更することなく追加情報をパーツに関連付けることができるパッケージ レベルの機能です。 パーツのコンテンツに新しいデータを直接挿入するのは、次のように多くの場合において実用的ではありません。
パーツの実際の種類およびそのコンテンツ スキーマが不明な場合。
わかっていたとしても、コンテンツ スキーマが新しい情報を追加する方法を提供しない可能性がある場合。
パーツが、デジタル署名されたり、暗号化されたり、変更できなくされたりする可能性がある場合。
パッケージ リレーションシップは、追加情報を個別のパーツまたはパッケージ全体に追加または関連付けるための検出可能な方法を提供します。 パッケージ リレーションシップは、次の 2 つの主要な機能のために使用されます。
1 つのパーツから別のパーツへの依存関係の定義。
メモまたはパーツに関連したその他のデータを追加する情報リレーションシップの定義。
PackageRelationship は、依存関係を定義し、パッケージのパーツまたはパッケージ全体に関連付けられたその他の情報を追加するための、すばやく検出可能な方法を提供します。
依存関係
依存関係は、1 つのパーツによって他のパーツに対して作成される依存関係を記述するために使用されます。 たとえば、パッケージには、1 つ以上の <img> イメージ タグを含む HTML パーツが含まれている場合があります。 イメージ タグは、パッケージの内部またはパッケージの外部 (インターネット経由でアクセスできる場合など) にあるその他のパーツとして配置されているイメージを参照します。 HTML ファイルに関連付けられている PackageRelationship を作成すると、依存リソースの検出およびアクセスがすばやく簡単になります。 ブラウザーまたはビューアー アプリケーションは、パーツ リレーションシップに直接アクセスし、スキーマが不明であったりドキュメントの解析を行わない状態で依存リソースをすぐにアセンブルできます。
情報リレーションシップ
メモまたは注釈と同様に、PackageRelationship は、実際にパーツのコンテンツ自体を変更することなく、パーツに関連付けられるその他の種類の情報を格納するために使用することもできます。
XPS ドキュメント
XML Paper Specification (XPS) ドキュメントは、レンダリングのために必要なすべてのリソースおよび情報と共に 1 つ以上の固定ドキュメントを格納するパッケージです。 XPS はネイティブな Windows Vista 印刷スプール ファイル形式でもあります。 An XpsDocument は、標準 ZIP データセットに格納され、イメージ ファイルやフォント ファイルなどのバイナリ コンポーネントと XML コンポーネントを組み合わせて格納できます。PackageRelationships は、ドキュメントを完全にレンダリングするために必要なコンテンツとリソースの間の依存関係を定義するために使用されます。 XpsDocument の設計は、次のような複数の用途をサポートする忠実性の高い単一のドキュメント ソリューションを提供します。
単一の移植可能で配布しやすいファイルとして、固定ドキュメント コンテンツおよびリソースを読み取り、書き込み、および格納する。
XPS ビューアー アプリケーションを使用してドキュメントを表示する。
Windows Vista のネイティブな印刷スプール出力形式でドキュメントを出力する。
XPS と互換性があるプリンターにドキュメントを直接ルーティングする。