共用方式為


XAMLServices 類別和基本的 XAML 讀取或寫入

XamlServices 是由 .NET 提供的類別,可用來解決不需要特定存取 XAML 節點數據流或從這些節點取得之 XAML 型別系統資訊的 XAML 案例。 XamlServices API 摘要如下:LoadParse 以支援 XAML 載入路徑、Save 支援 XAML 儲存路徑,以及 Transform 提供聯結載入路徑和儲存路徑的技術。 Transform 可用來從一個 XAML 架構變更為另一個架構。 本主題摘要說明每個 API 分類,並描述特定方法多載之間的差異。

負荷

Load 的各種多載會實作載入路徑的完整邏輯。 載入路徑會以某種形式使用 XAML,並輸出 XAML 節點資料流。 這些載入路徑大多在編碼的 XML 文字檔表單中使用 XAML。 不過,您也可以載入一般數據流,也可以載入已包含在不同 XamlReader 實作中的預先載入 XAML 來源。

大部分案例中最簡單的多載是 Load(String)。 此多載具有 fileName 參數,只是包含要載入之 XAML 的文字文件名稱。 這適用於應用程式案例,例如先前將狀態或數據串行化至本機計算機的完整信任應用程式。 這也適用於您定義應用程式模型,並想要載入其中一個定義應用程式行為、啟動UI或其他使用 XAML 架構定義功能的標準檔案。

Load(Stream) 也有類似的案例。 如果您有使用者選擇要載入的檔案,此多載可能會很有用,因為 Stream 是其他可存取檔案系統之其他 System.IO API 的頻繁輸出。 或者,您可以透過異步下載或其他也提供數據流的網路技術來存取 XAML 來源。 (從數據流或用戶選取的來源載入可能會有安全性影響。如需詳細資訊,請參閱 XAML 安全性考慮。)

Load(TextReader)Load(XmlReader) 是依賴舊版 .NET 格式讀取器的多載。 若要使用這些多載,您應該已經建立讀取器實例,並使用其 Create API,以相關形式載入 XAML(文字或 XML)。 如果您已經移動其他讀取器中的記錄指標,或使用這些指標執行其他作業,這並不重要。 來自 Load 的載入路徑邏輯一律會從根目錄處理整個 XAML 輸入。 下列案例可能會保證使用這些多載:

  • 設計介面,您可以從現有的 XML 特定文字編輯器提供簡單的 XAML 編輯功能。

  • 核心 System.IO 案例的變體,您可以在其中使用專用讀取器來開啟檔案或數據流。 邏輯會先執行基本檢查或處理內容,然後再嘗試載入為 XAML。

您可以載入檔案或數據流,也可以載入 XmlReaderTextReaderXamlReader,藉由使用讀取器的 API 載入來包裝您的 XAML 輸入。

在內部,上述每個多載最終都會 Load(XmlReader),而傳遞的 XmlReader 會用來建立新的 XamlXmlReader

提供更進階案例的 Load 簽章 Load(XamlReader)。 您可以針對下列其中一個案例使用此簽章:

  • 您已定義自己的 XamlReader實作。

  • 您必須指定與預設設定不同之 XamlReader 的設定。

非預設設定的範例:

AllowProtectedMembersOnRoot
BaseUri
IgnoreUidsOnPropertyElements
LocalAssembly
ValuesMustBeString

XamlServices 的預設讀取器為 XamlXmlReader。 如果您提供自己的 XamlXmlReader 設定,以下是設定非預設 XamlXmlReaderSettings的屬性:

CloseInput
SkipXmlCompatibilityProcessing
XmlLang
XmlSpacePreserve

解析

Parse 就像 Load,因為它是從 XAML 輸入建立 XAML 節點數據流的載入路徑 API。 不過,在此情況下,XAML 輸入會直接提供為包含要載入之所有 XAML 的字串。 Parse 是一種輕量型方法,比架構案例更適合應用程式案例。 如需詳細資訊,請參閱 ParseParse 只是內部牽涉到 StringReader 的包裝 Load(XmlReader) 呼叫。

Save 實作儲存路徑的各種多載。 所有 Save 方法都會接受物件圖形作為輸入,並產生輸出做為數據流、檔案或 XmlWriter/TextWriter 實例。

輸入對象必須是某些物件表示法的根物件。 這可能是商務物件的單一根目錄、UI 案例中頁面之物件樹狀結構的根目錄、設計工具的工作編輯介面,或適用於案例的其他根物件概念。

在許多案例中,您儲存的物件樹狀結構與使用 Load 載入 XAML 的原始作業相關,或是透過架構/應用程式模型實作的其他 API 載入 XAML。 由於狀態變更、應用程式從使用者擷取運行時間設定的變更、您的應用程式是 XAML 設計介面等,所以在物件樹狀結構中擷取的差異可能有所差異。使用或沒有變更時,先從標記載入 XAML 的概念,然後再次儲存並比較這兩種 XAML 標記形式,有時稱為 XAML 的來回表示法。

儲存和串行化以標記形式設定的複雜對象的挑戰在於在不遺失信息的情況下,在完整表示之間取得平衡,與讓 XAML 更容易閱讀的詳細資訊。 此外,XAML 的不同客戶可能會有不同的定義或預期,以瞭解如何設定該平衡。 Save API 代表該平衡的一個定義。 Save API 會使用可用的 XAML 架構內容和預設 CLR 型特性,XamlTypeXamlMember,以及其他 XAML 內建和 XAML 類型系統概念,以判斷特定 XAML 節點數據流建構在儲存回標記時可以優化的位置。 例如,XamlServices 儲存路徑可以使用CLR型的預設 XAML 架構內容來解析物件的 XamlType、判斷 XamlType.ContentProperty,然後在將 屬性寫入物件的 XAML 內容時省略屬性元素標記。

變換

Transform 連結載入路徑和儲存路徑做為單一作業來轉換或轉換 XAML。 不同的架構內容或不同的支援類型系統可用於 XamlReaderXamlWriter,這會影響產生的 XAML 轉換方式。 這適用於廣泛的轉換作業。

對於依賴檢查 XAML 節點資料流中每個節點的作業,您通常不會使用 Transform。 相反地,您需要定義自己的載入路徑儲存作業系列,並插話您自己的邏輯。 在其中一個路徑中,在您自己的節點循環周圍使用 XAML 讀取器/XAML 寫入器組。 例如,使用 XamlXmlReader 載入初始 XAML,並使用後續 Read 呼叫逐步執行節點。 在 XAML 節點資料流層級上作業,您現在可以調整個別節點(類型、成員、其他節點)來套用轉換,或讓節點保持 as-is。 然後,您會將節點傳送至 XamlObjectWriter 的相關 Write API,並寫出 物件。 如需詳細資訊,請參閱 瞭解 XAML 節點資料流結構和概念

另請參閱