Windows Presentation Foundation 中的文件
更新:2007 年 11 月
Windows Presentation Foundation (WPF) 所提供的各種文件功能可以建立高精確度的內容,此種內容的設計會比在舊版 Windows 中更加容易存取與閱讀。除了增強的功能與品質以外,WPF 還提供文件顯示、封裝 (Package) 和安全性的整合式服務。本主題提供 WPF 文件類型與文件封裝的簡介。
這個主題包含下列章節。
- 文件的類型
- 文件控制項和文字配置
- 文件封裝
- XPS 文件
- 相關主題
文件的類型
WPF 根據文件的預期用途將文件分為兩大類,這兩種文件分類稱為「固定格式文件」與「非固定格式文件」。
固定格式文件適合需要精確「所見即所得」(WYSIWYG) 展示的應用程式,與所用的顯示器或印表機硬體無關。固定格式文件一般用於桌上出版、文書處理、表單配置等,這些都必須嚴格遵循原始的頁面設計。固定格式文件會在其配置中維護內容項目的精確位置,不受使用中的顯示器或列印裝置影響。例如,在 96 dpi 顯示器上檢視的固定格式文件頁面,不論是輸出到 600 dpi 雷射印表機或輸出到 4800 dpi 相紙輸出機,看起來都完全一樣。文件品質會充分發揮各裝置的性能,但頁面配置永遠相同。
相較之下,非固定格式文件的設計用意是為了將檢視及可讀性最佳化,當讀取方便是主要的文件使用考量時,非固定格式文件便能達到最佳使用狀況。非固定格式文件並不會設為某種預先定義的配置,反而會根據執行階段變數 (如視窗大小)、裝置解析度和選擇性的使用者偏好設定,動態調整及重新排列其內容。網頁是一種簡單的非固定格式文件範例,其中的頁面內容會動態進行格式化,以配合目前的視窗。非固定格式文件會根據執行階段環境,讓使用者擁有最佳的檢視和讀取經驗。例如,同一份非固定格式文件在高解析度 19 吋顯示器或小型 2x3 吋 PDA 螢幕上都會動態重新格式化,以獲得最佳可讀性。此外,非固定格式文件具備許多內建功能,包含搜尋、會最佳化可讀性的檢視模式,以及變更字型大小與外觀的能力。請參閱非固定格式文件概觀,以取得非固定格式文件的說明、範例和深入資訊。
文件控制項和文字配置
.NET Framework 會提供一組預先建置的控制項,可簡化在應用程式中使用固定格式文件、非固定格式文件和一般文字的狀況。使用 DocumentViewer 控制項可以支援固定格式文件內容的顯示。非固定格式文件內容的顯示則由三個不同的控制項支援:FlowDocumentReader、FlowDocumentPageViewer 和 FlowDocumentScrollViewer,這三個控制項分別對應至不同使用者案例,請參閱下列各節。其他 WPF 控制項提供簡化的配置,以支援一般文字用途 (請參閱下方的使用者介面中的文字)。
固定格式文件控制項 - DocumentViewer
DocumentViewer 控制項是設計用來顯示 FixedDocument 內容。DocumentViewer 控制項提供的直覺式使用者介面可提供一般作業的內建支援,其中包含列印輸出、複製到剪貼簿、縮放及文字搜尋功能。此控制項可透過常見的捲動機制,提供內容頁面的存取。就像所有 WPF 控制項一樣,DocumentViewer 可支援完整或部分樣式重新設定,而讓此控制可以視覺化方式整合至任何應用程式或環境中。
DocumentViewer 的設計是以唯讀方式顯示內容,不支援內容的編輯或修改。
非固定格式文件控制項
**注意:**如需非固定格式文件功能及其建立方式的詳細資訊,請參閱非固定格式文件概觀。
下列三個控制項可支援非固定格式文件內容的顯示:FlowDocumentReader、FlowDocumentPageViewer 和 FlowDocumentScrollViewer。
FlowDocumentReader
FlowDocumentReader 包含可讓使用者動態選擇各種檢視模式的功能,包括單頁 (一次顯示一頁) 檢視模式、雙頁 (書本閱讀格式) 檢視模式,以及連續捲動 (無底邊) 檢視模式。如需這些檢視模式的詳細資訊,請參閱 FlowDocumentReaderViewingMode。如果您不需要動態切換不同檢視模式的能力,則 FlowDocumentPageViewer 和 FlowDocumentScrollViewer 可提供較輕量的非固定格式內容檢視器,這兩種會固定使用特定的檢視模式。
FlowDocumentPageViewer 和 FlowDocumentScrollViewer
FlowDocumentPageViewer 會以一次顯示一頁的檢視模式顯示內容,而 FlowDocumentScrollViewer 會以連續捲動模式顯示內容。FlowDocumentPageViewer 和 FlowDocumentScrollViewer 都有固定的特定檢視模式。相較之下,FlowDocumentReader 包含的功能可讓使用者動態選擇各種檢視模式 (如 FlowDocumentReaderViewingMode 列舉型別所提供),但代價是比 FlowDocumentPageViewer 或 FlowDocumentScrollViewer 需要更多資源。
依預設一定會顯示垂直捲軸,而水平捲動會視需要顯示。FlowDocumentScrollViewer 的預設 UI 不包含工具列,不過 IsToolBarVisible 屬性可用來啟用內建工具列。
使用者介面中的文字
除了將文字加入至文件以外,文字很顯然可以用於應用程式 UI 中,例如表單。WPF 包含多個可將文字繪製到畫面上的控制項。每個控制項都鎖定不同的案例,而且擁有自己的功能與限制清單。一般而言,在需要有限的文字支援 (例如使用者介面 (UI) 中的簡短句子) 時,應該使用 TextBlock 項目。而在需要最少文字支援時,則可使用 Label。如需詳細資訊,請參閱 TextBlock 概觀。
文件封裝
System.IO.Packaging API 提供的有效方法,可以組織應用程式資料、文件內容,以及容易存取、可攜式且容易散發之單一容器中的相關資源。ZIP 檔就是能夠將多個物件當做一個單位保留之 Package 類型的範例。封裝 API 會提供使用「開放式封裝慣例」標準與 XML 和 ZIP 檔案架構所設計的預設 ZipPackage 實作。WPF 封裝 API 可以輕易建立封裝,以及儲存和存取其中的物件。儲存在 Package 中的物件就是指 PackagePart (「組件」)。封裝也可以包含簽署的數位憑證,該憑證可用於識別組件的發行者及驗證封裝內容是否未經修改。封裝也可以包含 PackageRelationship 功能,此功能允許將其他資訊加入至封裝或與特定組件產生關聯,而不需實際修改現有組件的內容。封裝服務也支援 Microsoft Windows Rights Management (RM)。
WPF 封裝架構可以做為許多重要技術的基礎:
符合 XML Paper Specification (XPS) 的 XPS 文件。
Microsoft Office "12" Open XML 格式文件 (.docx)。
適用於您自己應用程式設計的自訂儲存格式。
以封裝 API 為基礎,為了儲存 WPF 固定格式內容文件而特別設計了 XpsDocument。XpsDocument 為獨立的 (Self-Contained) 文件,可以在檢視器中開啟、在 DocumentViewer 控制項中顯示、傳送至列印多工緩衝區,或直接輸出至 XPS 相容的印表機。
下列章節提供 WPF 隨附之 Package 和 XpsDocument API 的其他資訊。
封裝元件
WPF 封裝 API 可以將應用程式資料和文件組織成單一可攜式單位。ZIP 檔案就是其中一種最常見的封裝類型,而且是 WPF 所隨附的預設封裝類型。Package 本身是一個抽象類別,從此類別中可以使用開放標準 XML 和 ZIP 檔案架構實作 ZipPackage。Open 方法會使用 ZipPackage,依預設建立及使用 ZIP 檔案。封裝可以包含三種基本項目類型:
應用程式內容、資料、文件和資源檔。 |
|
用於識別、驗證 (Authentication) 和驗證 (Validation) 的 X.509 憑證。 |
|
與封裝或特定組件相關的新增資訊。 |
PackageParts
PackagePart (「組件」) 是一個抽象類別,就是指儲存在 Package 中的物件。在 ZIP 檔中,封裝組件會對應到儲存於 ZIP 檔中的個別檔案。ZipPackagePart 對於儲存在 ZipPackage 中的可序列化物件,提供預設實作。就像檔案系統一樣,封裝內含的組件會儲存在階層式目錄或「資料夾形式」的組織中。透過 WPF 封裝 API,應用程式可以使用單一 ZIP 檔案容器,寫入、儲存及讀取多個 PackagePart 物件。
PackageDigitalSignatures
基於安全理由,PackageDigitalSignature (「數位簽章」) 可以與封裝內的組件產生關聯。PackageDigitalSignature 納入了 509,可以提供兩項功能:
識別並驗證組件的建立者。
驗證組件未受到修改。
數位簽章不會防止組件遭到修改,但如果組件有任何改變,對於數位簽章的驗證檢查就會失敗。然後,應用程式可以採取適當的動作,例如:防止開啟組件,或通知使用者該組件已遭修改,因此並不安全。
PackageRelationships
PackageRelationship (「關聯性」) 提供的機制可以使其他資訊與封裝或封裝內的組件產生關聯。關聯性為封裝層級機能,可以使其他資訊與組件產生關聯,而不需修改實際組件內容。將新資料直接插入組件內容中,在許多情況下常不切實際:
不知道組件與其內容結構描述的實際類型。
即使知道,內容結構描述也不會提供用以加入新資訊的方法。
組件可能會進行數位簽署或加密,以免遭到修改。
封裝關聯性會提供顯而易見的方法,用以新增或使其他資訊與個別組件或整個封裝產生關聯。封裝關聯性可用於兩項主要功能:
定義某個組件與另一個組件的相依性關係。
定義資訊關聯性,以便新增組件的相關注意事項或其他資料。
PackageRelationship 會提供迅速而明顯的方法,用以定義相依性及新增與封裝組件或整個封裝相關聯的其他資訊。
相依性關係
相依性關係用於描述某個組件與其他組件的相依性。例如,封裝所含的 HTML 組件包含了一個或多個 <img> 影像標記。影像標記所參考的影像就是位於封裝內部或外部的其他組件 (例如可以透過網際網路存取)。建立與 HTML 檔相關聯的 PackageRelationship,即可輕易快速地探索和存取相依資源。不必知道結構描述或剖析文件,瀏覽器或檢視器應用程式便可直接存取組件關聯性,並立即開始組合相依資源。
資訊關聯性
PackageRelationship 類似於注意事項或附註,也可以用於儲存要與組件相關聯之其他類型的資訊,而不需實際修改組件內容本身。
XPS 文件
XML Paper Specification (XPS) 文件為含有一個或多個固定格式文件,以及呈現所需之全部資源與資訊的封裝。XPS 也是原生 Windows Vista 列印多工緩衝檔案格式。XpsDocument 會儲存在標準 ZIP 資料集中,而且可以包含 XML 和二進位元件的組合 (例如影像和字型檔案)。PackageRelationships 用於定義要完全呈現文件所需的內容和資源之間的相依性。XpsDocument 設計提供的單一、高精確度文件解決方案,可以支援下列多種用途:
將固定格式文件的內容與資源當做單一可攜式且容易散發的檔案,進行讀取、寫入及儲存。
使用 XPS 檢視器應用程式顯示文件。
以 Windows Vista 的原生列印多工緩衝輸出格式來輸出文件。
將文件直接傳送到與 XPS 相容的印表機。