XAML 的類型轉換器和標記延伸
類型轉換器和標記延伸是 XAML 類型系統和 XAML 寫入器用來產生物件圖形元件的兩種技術。 雖然它們共用一些特性,但類型轉換器和標記延伸在 XAML 節點數據流中會以不同的方式表示。 在此檔集中,類型轉換器、標記延伸和類似的建構有時統稱為值轉換器。
值轉換器
在 XAML 中,值轉換器用於各種案例。 下列清單顯示 XAML 中的不同類型的值轉換器:
類型轉換器
標記延伸
值串行化程式
提供 XAML 文字語法邏輯的相關類別或支持類別
類型轉換器
在 .NET XAML 服務定義中,類型轉換器是衍生自CLR TypeConverter 類別的類別。 TypeConverter 是 XAML 存在之前在 .NET 中的類別。 其原始目的是支援 IDE 屬性的屬性視窗和類似的文字型編輯隱喻。 .NET 的 XAML 簡介會使用 TypeConverter,將文字語法(如屬性值或 XAML 值節點中找到)轉換成 物件。 TypeConverter 也可用來將物件值串行化為文字語法。 TypeConverter 也用於 Windows Presentation Foundation (WPF) 和 Windows Communication Foundation (WCF) 中先前架構特定的 XAML 實作。 如需 XAML 中 TypeConverter 的詳細資訊,請參閱 XAML 類型轉換器概觀。
標記延伸
在 .NET XAML 服務實作中,標記延伸是衍生自 MarkupExtension 類別的類別。 標記延伸是一種概念,在此窗體中是由 XAML 語言所產生。 您可以將標記延伸視為呼叫服務類別以提供其邏輯的可延伸逸出序列。 就標記而言,XAML 處理器會以文字字串中的左大括號 ({) 開頭的文字序列,普遍辨識標記延伸。
標記延伸與類型轉換器不同。 類型轉換器通常與類型或成員相關聯。 當物件圖形建立或串行化遇到與這些實體相關聯的文字語法時,就會叫用它們。
標記延伸與單一支援服務類別相關聯,但可以套用至任何成員值。 不過,您可以使用服務內容,實作標記延伸,以刻意限制其使用特定成員或目的地類型。標記延伸可以覆寫類型轉換器關聯。 或者,您可以使用它們來為不支援文字語法的成員指定屬性值。
如需 XAML 標記延伸實作模式的詳細資訊,請參閱 XAML 的標記延伸概觀。
值串行化程式
ValueSerializer 是特製化型別轉換器,最適合將對象轉換成字串。 XAML 的 ValueSerializer 可能完全不會實作 ConvertFrom
方法。
ValueSerializer 實作會以類似 TypeConverter 實作的方式取得服務。 虛擬方法會提供輸入 context
參數。
context
參數的類型為 IValueSerializerContext,其繼承自 IServiceProvider 介面,且具有 GetService 方法。
在 XAML 類型系統和使用 XAML 節點循環處理進行串行化之 XAML 寫入器實作中,與型別或成員相關聯的值轉換器會由它自己的 XamlType.ValueSerializer 屬性報告。 執行串行化之 XAML 寫入器的意義在於,如果 XamlType.TypeConverter 和 XamlType.ValueSerializer 存在,類型轉換器應該用於載入路徑,而值串行化程式應該用於儲存路徑。 如果 XamlType.TypeConverter 存在,但 XamlType.ValueSerializernull
,則類型轉換器也會用於儲存路徑。
其他值轉換器
值轉換器可延伸至類型轉換器或標記延伸的特定模式之外。 不過,此自定義也需要重新定義 .NET XAML 服務所提供的 XAML 類型系統。 現有的 XAML 類型系統具有類型轉換器、標記延伸和值串行化程式的表示法和報告系統,但不適用於自訂形式的值轉換。 如果您想要建立自定義值轉換器,請使用 XamlValueConverter<TConverterBase> 類型。
結合類型轉換器和標記延伸
標記延伸和類型轉換器用於 XAML 中的不同情況。 雖然內容可用於標記延伸使用方式,但標記延伸提供值的屬性類型轉換行為通常不會在標記延伸實作中檢查。 換句話說,即使標記延伸傳回文字字串作為其 ProvideValue
輸出,也不會叫用套用至特定屬性或屬性值類型之該字串的類型轉換行為。 一般而言,標記延伸的目的是處理字串,並傳回物件,而不需要任何類型轉換器。
值轉換器的服務內容
當您實作值轉換器時,通常需要存取套用值轉換器的內容。 此內容稱為服務內容。 服務內容可能包含作用中 XAML 架構內容、存取 XAML 架構內容和 XAML 物件寫入器所提供的類型對應系統等資訊。 如需值轉換子可用之服務內容以及如何存取服務內容可能提供之服務的詳細資訊,請參閱 類型轉換子可用的服務內容和標記延伸。
另請參閱
- MarkupExtension
- XamlObjectWriter
- 適用於 XAML 的 標記延伸概觀
- 適用於 XAML 的 類型轉換器概觀
- 類型轉換器和標記延伸 可用的服務內容