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 架構內容(使用替代元件載入技術來支援類型來源;使用已知型別查閱技術,而不一律反映元件;使用未使用 Common Language Runtime (CLR) 的載入元件概念
AppDomain
及其相關聯的安全性模型)。擴充基底 XAML 類型系統。
使用
Lookup
或Invoker
技術來影響 XAML 類型系統,以及評估型別備份的方式。
如果您要尋找 XAML 作為語言的簡介資料,您可以嘗試 XAML 概觀 (WPF .NET)。 本主題討論適用於 Windows Presentation Foundation (WPF) 和使用 XAML 標記和 XAML 語言功能之物件的 XAML。 另一份有用的檔是 XAML 語言規格中的簡介內容。
.NET 架構中的 .NET XAML 服務和 System.Xaml
.NET XAML 服務和 System.Xaml
元件會定義支援 XAML 語言功能所需的大部分專案。 這包括 XAML 讀取器和 XAML 寫入器的基類。 新增至任何架構特定 XAML 實作中不存在的 .NET 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 載入 XamlXmlReader。 XamlXmlReader 是 XamlReader 子類別。
結果是 XAML 節點數據流。 您可以使用 XamlXmlReader / XamlReader API 來存取 XAML 節點資料流的個別節點。 此處最典型的作業是透過 XAML 節點資料流前進,並使用「目前記錄」隱喻處理每個節點。
將產生的節點從 XAML 節點數據流傳遞至 XamlObjectWriter API。 XamlObjectWriter 是 XamlWriter 子類別。
XamlObjectWriter 會根據來源 XAML 節點數據流的進度,一次寫入一個物件圖形,一個物件。 物件寫入是在 XAML 架構內容和可存取支援型別系統和架構之元件和型別的實作的協助下完成。
在 XAML 節點數據流結尾呼叫 Result,以取得物件圖形的根物件。
最常見的儲存路徑類型可描述如下:
從整個應用程式運行時間的物件圖形、運行時間的 UI 內容和狀態,或運行時間整體應用程式物件表示的較社區段開始。
從邏輯起始物件,例如應用程式根目錄或檔案根目錄,將物件載入至 XamlObjectReader。 XamlObjectReader 是 XamlReader 子類別。
結果是 XAML 節點數據流。 您可以使用 XamlObjectReader 和 XamlReader API 來存取 XAML 節點資料流的個別節點。 此處最典型的作業是透過 XAML 節點資料流前進,並使用「目前記錄」隱喻處理每個節點。
將產生的節點從 XAML 節點數據流傳遞至 XamlXmlWriter API。 XamlXmlWriter 是 XamlWriter 子類別。
XamlXmlWriter 會以 XML UTF 編碼方式寫入 XAML。 您可以將此檔案儲存為文本文件、數據流,或以其他形式儲存。
呼叫 Flush 以取得最終輸出。
如需 XAML 節點資料串流概念的詳細資訊,請參閱 瞭解 XAML 節點資料流結構和概念。
XamlServices 類別
不一定需要處理 XAML 節點數據流。 如果您想要基本載入路徑或基本儲存路徑,您可以在 XamlServices 類別中使用 API。
Load 的各種簽章會實作載入路徑。 您可以載入檔案或數據流,或載入 XmlReader、TextReader 或 XamlReader,以使用該讀取器的 API 載入來包裝您的 XAML 輸入。
Save 的各種簽章會儲存物件圖形,併產生輸出做為數據流、檔案或 XmlWriter/TextWriter 實例。
Transform 連結載入路徑和儲存路徑做為單一作業,以轉換 XAML。 不同的架構內容或不同的支援類型系統可以用於 XamlReader 和 XamlWriter,這會影響產生的 XAML 轉換方式。
如需如何使用 XamlServices的詳細資訊,請參閱 XAMLServices 類別和基本 XAML 讀取或寫入。
XAML 類型系統
XAML 類型系統提供使用 XAML 節點資料流指定個別節點所需的 API。
XamlType 是物件的表示法 -您要在起始物件節點和結束對象節點之間處理的內容。
XamlMember 是對象成員的表示法-您要在開始成員節點與結束成員節點之間處理的內容。
GetAllMembers、GetMember 和 DeclaringType 等 API 會報告 XamlType 與 XamlMember之間的關聯性。
.NET XAML 服務所實作的 XAML 類型系統預設行為是以 Common Language Runtime (CLR) 為基礎,並使用反映在元件中靜態分析 CLR 類型。 因此,針對特定 CLR 類型,XAML 類型系統的預設實作可以公開該類型及其成員的 XAML 架構,並以 XAML 類型系統來報告它。 在預設 XAML 類型系統中,型別的可指派性概念會對應至 CLR 繼承,而實例、實值型別等的概念也會對應至 CLR 的支援行為和功能。
XAML 語言功能的參考
為了支援 XAML,.NET XAML 服務會提供 XAML 語言概念的特定實作,如 XAML 語言 XAML 命名空間所定義。 這些記錄為特定的參考頁面。 語言功能會從 XAML 讀取器或 .NET XAML 服務所定義的 XAML 寫入器處理時,這些語言功能的運作方式來記載。 如需詳細資訊,請參閱 XAML 命名空間 (x:) 語言功能。