共用方式為


WPF 中的文件

Windows Presentation Foundation (WPF) 所提供的各種文件功能可以建立高精確度的內容,此種內容的設計會比在舊版 Windows 中更加容易存取與閱讀。 除了增強功能和品質,WPF 也針對文件顯示、封裝和安全性提供整合式服務。 本主題為 WPF 文件類型和文件封裝的簡介。

文件的類型

WPF 根據文件的預期用途將文件分為兩大類,這兩種文件分類稱為「固定格式文件」與「非固定格式文件」。

固定格式文件適用於需要精確「所見即所得」(WYSIWYG) 呈現方式的應用程式,與所使用的顯示器或印表機硬體無關。 固定格式文件一般用於桌上出版、文書處理和表單配置,必須嚴格遵循原始頁面設計。 固定格式文件會在其配置中維持內容項目的精確位置,不受使用中的顯示器或列印裝置影響。 例如,在 96 dpi 顯示器上檢視的固定格式文件頁面,不論是輸出到 600 dpi 雷射印表機或輸出到 4800 dpi 相紙輸出機,看起來都完全一樣。 文件品質會充分發揮各裝置的性能,但頁面配置永遠相同。

相較之下,非固定格式文件的設計用意是為了將檢視及可讀性最佳化;如果容易閱讀是主要的文件使用考量,則最適合使用非固定格式文件。 非固定格式文件並不會設為某種預先定義的配置,而是會根據執行階段變數 (例如視窗大小、裝置解析度和選擇性的使用者喜好設定),動態調整及自動重排其內容。 網頁即是一個簡單的非固定格式文件範例,其中的頁面內容會動態進行格式化,以符合目前視窗大小。 非固定格式文件會根據執行階段環境,讓使用者擁有最佳的檢視和閱讀體驗。 例如,同一份非固定格式文件在高解析度 19 吋顯示器或小型 2x3 吋 PDA 螢幕上都會動態重新格式化,以獲得最佳可讀性。 此外,非固定格式文件具備許多內建功能,包括搜尋、將可讀性最佳化的檢視模式,以及變更字型大小與外觀的能力。 如需非固定格式文件的說明、範例和深入資訊,請參閱非固定格式文件概觀

文件控制項和文字配置

NET Framework 提供一組預先建立的控制項,可簡化在應用程式中使用固定格式文件、非固定格式文件和一般文字的作業。 DocumentViewer 控制項支援顯示固定格式文件內容。 三種不同的控制項皆支援顯示非固定格式文件內容:FlowDocumentReaderFlowDocumentPageViewerFlowDocumentScrollViewer,分別對應不同的使用者情境 (請參閱以下各節)。 其他 WPF 控制項提供簡化的配置,以支援一般文字用途 (請參閱下方的使用者介面文字)。

固定格式文件控制項 - DocumentViewer

DocumentViewer 控制項專為顯示 FixedDocument 內容而設計。 DocumentViewer 控制項的直覺式使用者介面可支援內建的一般作業,包括列印輸出、複製到剪貼簿、縮放和文字搜尋功能。 此控制項可透過常見的捲動機制,來存取多頁內容。 如同所有 WPF 控制項,DocumentViewer 支援重新設定完整或部分樣式,讓控制項能以視覺化方式整合至幾乎所有應用程式或環境中。

DocumentViewer 專為顯示唯讀內容而設計,無法且不支援編輯或修改內容。

非固定格式文件控制項

注意

如需非固定格式文件功能及如何建立該類型文件的詳細資訊,請參閱非固定格式文件概觀

三種不同的控制項皆支援顯示非固定格式文件內容:FlowDocumentReaderFlowDocumentPageViewerFlowDocumentScrollViewer

FlowDocumentReader

FlowDocumentReader 包含可讓使用者動態選擇各種檢視模式的功能,包括單頁 (一次顯示一頁) 檢視模式、一次顯示兩頁 (書本閱讀格式) 檢視模式,以及連續捲動 (無底邊) 檢視模式。 如需這些檢視模式的相關資訊,請參閱 FlowDocumentReaderViewingMode。 如果您不需要動態切換不同檢視模式的功能,FlowDocumentPageViewerFlowDocumentScrollViewer 支援佔用較少資源的非固定格式內容檢視器,並可固定在特定檢視模式下執行。

FlowDocumentPageViewer 和 FlowDocumentScrollViewer

FlowDocumentPageViewer 會以單頁 (一次顯示一頁) 檢視模式顯示內容,FlowDocumentScrollViewer 會以連續捲動模式顯示內容。 FlowDocumentPageViewerFlowDocumentScrollViewer 都可設定為固定的特定檢視模式。 FlowDocumentReader 可讓使用者動態選擇各種檢視模式 (如 FlowDocumentReaderViewingMode 所列舉之檢視模式),但其佔用的資源較 FlowDocumentPageViewerFlowDocumentScrollViewer 多。

預設一定會顯示垂直捲軸,而水平捲動則會視需要顯示。 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 文件規格 (XPS) 的 XPS 文件。

  • Microsoft Office "12" Open XML 格式文件 (.docx)。

  • 適用於您自己應用程式設計的自訂儲存格式。

XpsDocument 是以封裝 API 為基礎,並專為儲存 WPF 固定格式內容文件所設計。 XpsDocument 是獨立式文件,可在檢視器中開啟,透過 DocumentViewer 控制項顯示,路由至列印多工緩衝處理,或直接輸出至與 XPS 相容的印表機。

下列各節為有關 WPF PackageXpsDocument API 的其他資訊。

封裝元件

WPF 封裝 API 可將應用程式資料和文件組織成單一可攜式單位。 ZIP 檔案就是其中一種最常見的封裝類型,而且是 WPF 的預設封裝類型。 Package 本身為摘要類別,而 ZipPackage 則是該摘要類別採用開放標準 XML 和 ZIP 檔案架構實作而成。 在預設情況下,Open 方法會使用 ZipPackage 來建立及使用 ZIP 檔案。 一個封裝可以包含三種基本項目類型:

項目 說明
PackagePart 應用程式內容、資料、文件和資源檔。
PackageDigitalSignature 用於識別、驗證 (Authentication 和 Validation) 的 [X.509 憑證]。
PackageRelationship 與封裝或特定組件相關的新增資訊。

PackageParts

PackagePart (「組件」) 本身為摘要類別,係指儲存在 Package 中的物件。 在 ZIP 檔案中,封裝組件會對應至儲存在 ZIP 檔案中的個別檔案。 ZipPackagePart 為儲存於 ZipPackage 中的可序列化物件提供預設實作。 就像檔案系統,封裝中包含的組件會儲存在階層式目錄或「資料夾樣式」的組織中。 透過 WPF 封裝 API,應用程式可以使用單一 ZIP 檔案容器,寫入、儲存及讀取多個 PackagePart 物件。

PackageDigitalSignatures

基於安全性,PackageDigitalSignature (「數位簽章」) 可與封裝內的組件相關聯。 PackageDigitalSignature 納入 [509],共有兩種功能:

  1. 識別並驗證組件的建立者。

  2. 驗證組件未遭修改。

數位簽章不會防止組件遭到修改,但如果組件有任何改變,對於數位簽章的驗證檢查就會失敗。 應用程式可以做出一些適當的回應,像是防止開啟組件,或通知使用者該組件已遭修改,因此並不安全。

PackageRelationships

PackageRelationship (「關聯性」) 這項機制可使其他資訊與封裝或封裝內的組件相關聯。 關聯性是封裝層級功能,可將其他資訊與組件產生關聯,而不需要修改實際組件內容。 直接將新資料插入組件內容,在許多情況下通常並不可行:

  • 不知道組件及其內容結構描述的實際類型。

  • 即使知道,內容結構描述也可能不會提供新增資訊的方法。

  • 組件可能會進行數位簽署或加密,以免遭到任何修改。

封裝關聯性提供一個顯而易見的方法,來新增其他資訊,並將此資訊與個別組件或整個封裝產生關聯。 封裝關聯性可用於兩項主要功能:

  1. 定義某個組件與另一個組件的相依性關聯性。

  2. 定義新增附註或組件之其他相關資料的資訊關聯性。

PackageRelationship 提供一個快速且可搜尋的方法來定義相依性,並能新增與封裝組件或整個封裝相關聯的其他資訊。

相依性關聯性

相依性關聯性可用來描述某個組件與其他組件的相依性。 例如,一個封裝可能包含一或多個 <img> 影像標籤的 HTML 組件。 影像標記所參考的影像,就是位於封裝內部或外部 (例如可透過網際網路存取) 的其他組件。 建立與 HTML 檔案相關聯的 PackageRelationship,即可輕鬆快速地搜尋和存取相依資源。 瀏覽器或檢視器應用程式可以直接存取組件關聯性,並立即開始組合相依資源,而不需要知道結構描述或剖析文件。

資訊關聯性

PackageRelationship 類似附註或註解,可用來儲存與組件相關聯的其他資訊類型,而不需要實際修改組件本身的內容。

XPS 文件

XML 文件規格 (XPS) 文件是一種封裝,其中包含一或多份固定格式文件,以及進行呈現所需的所有資源和資訊。 XPS 也是原生 Windows Vista 列印多工緩衝處理檔案格式。 XpsDocument 會儲存在標準 ZIP 資料集中,且能包含 XML 和二進位元件組合,例如圖片和字型檔案。 PackageRelationships 可用來定義完整呈現文件所需的內容和資源之間的相依性。 XpsDocument 支援下列多用途的單一、高精確度文件解決方案:

  • 將固定格式文件內容和資源當做單一可攜式且容易散發的檔案,進行讀取、寫入及儲存。

  • 使用 XPS 檢視器應用程式顯示文件。

  • 以 Windows Vista 的原生列印多工緩衝處理輸出格式來輸出文件。

  • 將文件直接路由傳送至與 XPS 相容的印表機。

另請參閱