從 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。

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 元件和 .NET Framework 4 中的 System.Xaml 元件中:

XamlReader

XamlWriter

XamlParseException

WPF 實作位於 System.Windows.Markup 命名空間和 PresentationFramework 組件中。 System.Xaml 實作位於 System.Xaml 命名空間中。 如果您使用 WPF 類型或衍生自 WPF 類型,通常應使用 XamlReaderXamlWriter 的 WPF 實作,而不是 System.Xaml 實作。 如需詳細資訊,請參閱 System.Windows.Markup.XamlReaderSystem.Windows.Markup.XamlWriter中的<備註>。

如果您同時納入 WPF 組件和 System.Xaml 的參考,並且同時對 includeSystem.Windows.Markup 命名空間使用 System.Xaml 陳述式,則您可能必須完整限定對這些 API 的呼叫,以明確解析類型。