從 WPF 移轉至 System.Xaml 的類型
在 .NET Framework 3.5 和 .NET Framework 3.0 中,Windows Presentation Foundation 和 Windows Workflow Foundation 都包含 XAML 語言實作。 有許多為 WPF XAML 實作提供擴充性的公用類型,存在於 WindowsBase、PresentationCore 和 PresentationFramework 組件中。 同樣地,為 Windows Workflow Foundation XAML 提供擴充性的公用類型存在於 System.Workflow.ComponentModel 元件中。 在 .NET Framework 4 中,某些 XAML 相關類型已移轉至 System.Xaml 元件。 XAML 語言服務的通用 .NET Framework 實作可啟用許多 XAML 擴充性案例,這些案例原本是由特定架構的 XAML 實作所定義,但現在是整體 .NET Framework 4 XAML 語言支援的一部分。 本文列出已移轉的類型,並討論與移轉相關的問題。
組件和命名空間
在 .NET Framework 3.5 和 .NET Framework 3.0 中,WPF 實作以支援 XAML 的類型通常位於 命名空間中 System.Windows.Markup 。 這些類型大多數位於 WindowsBase 組件中。
在 .NET Framework 4 中,有新的 System.Xaml 命名空間和新的 System.Xaml 元件。 許多原先針對 WPF XAML 實作的類型,現已提供為任何 XAML 實作的擴充點或服務。 為了可供更多一般情節使用,這些類型已從其原始 WPF 組件類型轉送至 System.Xaml 組件。 這可讓 XAML 擴充性案例,而不需要包含其他架構的元件(例如 WPF 和 Windows Workflow Foundation)。
大部分移轉後的類型仍會位於 System.Windows.Markup 命名空間中。 部分原因是為了避免破壞個別檔案之現有實作中的 CLR 命名空間對應。 因此, System.Windows.Markup .NET Framework 4 中的命名空間包含一般 XAML 語言支援類型(來自 System.Xaml 元件)和 WPF XAML 實作特有的類型(來自 WindowsBase 和其他 WPF 元件)。 任何已移轉至 System.Xaml、但先前存在於 WPF 組件中的類型,在 WPF 組件第 4 版中都具有類型轉送支援。
Workflow XAML 支援類型
Windows Workflow Foundation 也提供 XAML 支援類型,在許多情況下,這些名稱與 WPF 對等名稱完全相同。 以下是 Windows Workflow Foundation XAML 支援類型的清單:
這些支援類型仍存在於適用于 .NET Framework 4 的 Windows Workflow Foundation 元件中,而且仍可用於特定的 Windows Workflow Foundation 應用程式;不過,不應該由不使用 Windows Workflow Foundation 的應用程式或架構參考它們。
MarkupExtension
在 .NET Framework 3.5 和 .NET Framework 3.0 中, MarkupExtension WPF 的類別位於 WindowsBase 元件中。 Windows Workflow Foundation MarkupExtension 的平行類別存在於 System.Workflow.ComponentModel 元件中。 在 .NET Framework 4 中,類別 MarkupExtension 會移轉至 System.Xaml 元件。 在 .NET Framework 4 中, MarkupExtension 適用于任何使用 .NET XAML 服務的 XAML 擴充性案例,而不只是針對建置在特定架構上的 XAML 擴充性案例。 進行 XAML 擴充時,也應盡可能將特定架構或架構中的使用者程式碼建置在 MarkupExtension 類別上。
支援服務類別的 MarkupExtension
適用于 WPF 的 .NET Framework 3.5 和 .NET Framework 3.0 提供了數個服務,可供 MarkupExtension 實作者和 TypeConverter 實作使用,以支援 XAML 中的類型/屬性使用方式。 這些服務包括:
注意
與標記延伸相關的 .NET Framework 3.5 的另一項服務是 IReceiveMarkupExtension 介面。 IReceiveMarkupExtension 未移轉,且標示 [Obsolete]
為 .NET Framework 4。 先前使用 IReceiveMarkupExtension 的情節應改用 XamlSetMarkupExtensionAttribute 屬性化回呼。 AcceptedMarkupExtensionExpressionTypeAttribute 也已標記為 [Obsolete]
。
XAML 語言功能
有數項 WPF 適用的 XAML 語言功能和元件先前存在於 PresentationFramework 組件中。 這些項目會以 MarkupExtension 子類別的形式實作,以在 XAML 標記中公開標記延伸使用。 在 .NET Framework 4 中,這些專案存在於 System.Xaml 元件中,讓不包含 WPF 元件的專案可以使用這些 XAML 語言層級功能。 WPF 會針對 .NET Framework 4 應用程式使用這些相同的實作。 如本主題所列的其他情況,支援類型會繼續存在於 System.Windows.Markup 命名空間中,以避免破壞先前的參考。
下表包含 System.Xaml 中定義的 XAML 功能支援類別清單。
XAML 語言功能 | 使用方式 |
---|---|
ArrayExtension | <x:Array ...> |
NullExtension | {x:Null} |
StaticExtension | {x:Static ...} |
TypeExtension | {x:Type ...} |
雖然 System.Xaml 可能沒有特定支援類別,但處理 XAML 語言的語言功能時所需的一般邏輯,現已常駐於 System.Xaml 以及其實作的 XAML 讀取器和 XAML 寫入器中。 例如, x:TypeArguments
是由 XAML 讀取器和 XAML 寫入器透過 System.Xaml 實作處理的屬性。該屬性可在 XAML 節點資料流中標註、在預設 (CLR 型) XAML 結構描述內容中有處理邏輯、具有 XAML 類型系統表示等。 如需 XAML 參考檔的詳細資訊,請參閱 XAML 服務 。
ValueSerializer 和支援類別
ValueSerializer 類別支援將類型轉換成字串,尤其是在 XAML 序列化需要輸出中有多個模式或節點時。 在 .NET Framework 3.5 和 .NET Framework 3.0 中, ValueSerializer 適用于 WPF 的 位於 WindowsBase 元件中。 在 .NET Framework 4 中,類別 ValueSerializer 位於 System.Xaml 中,適用于任何 XAML 擴充性案例,而不只是針對在 WPF 上建置的 XAML 擴充性案例。 IValueSerializerContext (支援服務) 和 DateTimeValueSerializer (特定子類別) 也會移轉至 System.Xaml。
XAML 相關屬性
WPF XAML 隨附數個可套用至 CLR 類型的屬性,以針對其 XAML 行為表示相關資訊。 以下是 .NET Framework 3.5 和 .NET Framework 3.0 中 WPF 元件中存在的屬性清單。 這些屬性會移轉至 .NET Framework 4 中的 System.Xaml。
其他類別
介面 IComponentConnector 存在於 .NET Framework 3.5 和 .NET Framework 3.0 的 WindowsBase 中,但存在於 .NET Framework 4 中的 System.Xaml 中。 IComponentConnector 主要用於工具支援和 XAML 標記編譯器。
介面 INameScope 存在於 .NET Framework 3.5 和 .NET Framework 3.0 的 WindowsBase 中,但存在於 .NET Framework 4 中的 System.Xaml 中。 INameScope 為 XAML 名稱範圍定義基本作業。
WPF 和 System.Xaml 中具有共用名稱的 XAML 相關類別
下列類別同時存在於 WPF 元件和 .NET Framework 4 中的 System.Xaml 元件中:
XamlReader
XamlWriter
XamlParseException
WPF 實作位於 System.Windows.Markup 命名空間和 PresentationFramework 組件中。 System.Xaml 實作位於 System.Xaml 命名空間中。 如果您使用 WPF 類型或衍生自 WPF 類型,通常應使用 XamlReader 和 XamlWriter 的 WPF 實作,而不是 System.Xaml 實作。 如需詳細資訊,請參閱 System.Windows.Markup.XamlReader 和 System.Windows.Markup.XamlWriter中的<備註>。
如果您同時納入 WPF 組件和 System.Xaml 的參考,並且同時對 include
和 System.Windows.Markup 命名空間使用 System.Xaml 陳述式,則您可能必須完整限定對這些 API 的呼叫,以明確解析類型。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應