XAML 服務

本主題說明 .NET XAML 服務的技術集功能。 大部分所述的服務和 API 都位於 System.Xaml 組件中。 服務包括讀取器和寫入器、結構描述類別和結構描述支援處理站、類別的屬性設定、XAML 語言內建支援,以及其他 XAML 語言功能。

關於本文件

.NET XAML 服務概念文件假設您先前有使用 XAML 語言的經驗,並了解其如何套用至特定架構 (例如 Windows Presentation Foundation (WPF) 或 Windows Workflow Foundation) 或特定技術功能區 (例如 Microsoft.Build.Framework.XamlTypes 中的組建自訂功能)。 本文件重點不在說明 XAML 標記語言的基本概念、XAML 語法術語或其他簡介內容, 而是著重於如何明確使用 System.Xaml 組件庫中啟用的 .NET XAML 服務。 其中大部分的 API 適用於 XAML 語言整合和擴充性案例。 這可能包括下列任何案例:

  • 擴充基底 XAML 讀取器或 XAML 寫入器的功能 (直接處理 XAML 節點資料流;衍生您自己的 XAML 讀取器或 XAML 寫入器)。

  • 定義不具特定架構相依性且 XAML 可用的自訂類型,並設定類型的屬性,以將其 XAML 類型系統特性傳達給 .NET XAML 服務。

  • 將 XAML 讀取器或 XAML 寫入器裝載為應用程式的元件,例如 XAML 標記來源的視覺化設計工具或互動式編輯器。

  • 撰寫 XAML 值轉換器 (標記延伸;自訂類型的類型轉換器)。

  • 定義自訂 XAML 結構描述內容 (使用替代組件載入技術來支援類型來源;使用已知類型的查閱技術,而不是一律反映組件;運用未使用通用語言執行平台 (CLR) AppDomain 及其相關聯安全性模型的載入組件概念)。

  • 擴充基底 XAML 類型系統。

  • 使用 LookupInvoker 技術來影響 XAML 類型系統,以及如何評估類型支援。

如果您要尋找 XAML 語言簡介資料,可以嘗試 XAML 概觀 (WPF .NET)。 該主題會從 Windows Presentation Foundation (WPF)、XAML 標記和 XAML 語言功能的新手角度來介紹 XAML。 另一個實用文件是 XAML 語言規格中的簡介資料。

.NET XAML 服務和 .NET 架構中的 System.Xaml

.NET XAML 服務和 System.Xaml 組件可定義支援 XAML 語言功能所需的大部分項目, 包括 XAML 讀取器和 XAML 寫入器的基底類別。 新增至 .NET XAML 服務最重要的功能是 XAML 類型系統表示法,此功能以往未曾在任何架構特有的 XAML 實作中出現。 類型系統表示法以物件導向的方式呈現 XAML,並著重在 XAML 的功能,而不需相依於架構的特定功能。

XAML 類型系統不因 XAML 來源的標記形式或執行階段特定項目受限;也不受限於任何特定的支援類型系統。 XAML 類型系統包含類型、成員、XAML 結構描述內容、XML 層級概念,以及其他 XAML 語言概念或 XAML 內建函式的物件表示法。 使用或擴充 XAML 類型系統時,可從 XAML 讀取器和 XAML 寫入器等類別進行衍生,並將 XAML 表示法的功能擴充至由架構、技術或應用程式 (取用或發出 XAML) 啟用的特定功能。 XAML 結構描述內容概念是透過下列組合達成實用的物件圖形寫入作業:XAML 物件寫入器實作、技術支援類型系統 (透過內容中的組件資訊進行通訊) 以及 XAML 節點來源。 如需 XAML 結構描述概念的詳細資訊, 請參閱預設 XAML 結構描述內容和 WPF XAML 結構描述內容

XAML 節點資料流、XAML 讀取器和 XAML 寫入器

若要了解 .NET XAML 服務在 XAML 語言與使用 XAML 語言的特定技術之間扮演何種角色,建議您先了解 XAML 節點資料流的概念,以及該概念如何塑造 API 和術語。 XAML 節點資料流是一種概念中繼,其銜接 XAML 語言表示法與 XAML 所代表或定義的物件圖形。

  • XAML 讀取器是一個實體,其會以某種形式處理 XAML,並產生 XAML 節點資料流。 在 API 中,XAML 讀取器是由基底類別 XamlReader 表示。

  • XAML 寫入器是一個實體,其會處理 XAML 節點資料流,並產生其他項目。 在 API 中,XAML 寫入器是由基底類別 XamlWriter 表示。

    XAML 的兩個最常見相關案例是載入 XAML 以將物件圖形具現化,以及透過應用程式或工具儲存物件圖形,並產生 XAML 表示法 (通常採用標記形式,並儲存為文字檔)。 本文件通常會將載入 XAML 並建立物件圖形的程序稱為載入路徑, 並將現有的物件圖形儲存或序列化為 XAML 的程序稱為儲存路徑。

    最常見的載入路徑類型如下所述:

  • 起點為 XAML 表示法,採用 UTF 編碼的 XML 格式,並儲存為文字檔。

  • 將該 XAML 載入 XamlXmlReaderXamlXmlReaderXamlReader 子類別。

  • 結果是 XAML 節點資料流。 您可以使用 XamlXmlReader / XamlReader API 存取 XAML 節點資料流的個別節點。 這裡最常見的作業是逐步推進 XAML 節點資料流,並使用「目前記錄」隱喻處理每個節點。

  • 將產生的節點從 XAML 節點資料流傳遞至 XamlObjectWriter API。 XamlObjectWriterXamlWriter 子類別。

  • XamlObjectWriter 會根據來源 XAML 節點資料流的進度,一次寫入一個物件的物件圖形。 物件寫入是透過 XAML 結構描述內容和相關實作的協助來完成,該實作可存取支援類型系統與架構的組件及類型。

  • 在 XAML 節點資料流結尾呼叫 Result,以取得物件圖形的根物件。

    最常見的儲存路徑類型如下所述:

  • 起點為整個應用程式執行階段的物件圖形、執行階段的 UI 內容和狀態,或執行階段整體應用程式物件表示法的較小區段。

  • 將物件從邏輯開始物件 (例如應用程式根目錄或主目錄) 載入 XamlObjectReaderXamlObjectReaderXamlReader 子類別。

  • 結果是 XAML 節點資料流。 您可以使用 XamlObjectReaderXamlReader API 存取 XAML 節點資料流的個別節點。 這裡最常見的作業是逐步推進 XAML 節點資料流,並使用「目前記錄」隱喻處理每個節點。

  • 將產生的節點從 XAML 節點資料流傳遞至 XamlXmlWriter API。 XamlXmlWriterXamlWriter 子類別。

  • XamlXmlWriter 會以 XML UTF 編碼方式寫入 XAML。 您可以將此檔案儲存為文字檔、資料流,或以其他形式儲存。

  • 呼叫 Flush 以取得最終輸出。

如需 XAML 節點資料流的詳細資訊,請參閱認識 XAML 節點資料流結構和概念

XamlServices 類別

您不一定需要處理 XAML 節點資料流。 如果您想要基本載入路徑或基本儲存路徑,您可以在 XamlServices 類別中使用 API。

  • 各種特徵標記的 Load 會實作載入路徑。 您可以載入檔案或資料流,也可以載入 XmlReaderTextReaderXamlReader,其可在與讀取器 API 一起載入時包裝您的 XAML 輸入。

  • 各種特徵標記的 Save 都會儲存物件圖形,並以資料流、檔案或 XmlWriter/TextWriter 執行個體的形式產生輸出。

  • Transform 可將載入路徑和儲存路徑連結成單一作業,以轉換 XAML。 XamlReaderXamlWriter 則可能會使用不同的結構描述內容或支援類型系統,來影響所產生 XAML 的轉換方式。

如需如何使用 XamlServices 的詳細資訊,請參閱 XAMLServices 類別和基本 XAML 的讀取或寫入

XAML 類型系統

XAML 類型系統可提供所需的 API,以使用 XAML 節點資料流的指定個別節點。

XamlType 是物件的表示法 - 亦即您要在開始物件節點與結尾物件節點之間處理的內容。

XamlMember 是物件成員的表示法 - 亦即您要在開始成員節點與結尾成員節點之間處理的內容。

GetAllMembersGetMemberDeclaringType 這類 API 會回報 XamlTypeXamlMember 之間的關聯性。

.NET XAML 服務實作的 XAML 類型系統,其預設行為是以通用語言執行平台 (CLR) 以及使用反映在組件中進行的 CLR 類型靜態分析為基礎。 因此,針對特定 CLR 類型,XAML 類型系統的預設實作可以公開該類型及其成員的 XAML 結構描述,並依據 XAML 類型系統來進行回報。 在預設 XAML 類型系統中,類型的可指派性概念會對應至 CLR 繼承,而執行個體、實值型別等的概念也會對應至 CLR 的支援行為和功能。

XAML 語言功能的參考

為了支援 XAML,.NET XAML 服務會提供 XAML 語言概念的特定實作,如 XAML 語言的 XAML 命名空間所定義。 這些內容都記載為特定參考頁面。 語言功能的記載角度是這些語言功能在由 .NET XAML 服務所定義的 XAML 讀取器或 XAML 寫入器處理時有哪些行為。 如需詳細資訊,請參閱 XAML Namespace (x:) Language Features