共用方式為


從 WPF 移轉至 System.Xaml 的型別

在 .NET Framework 3.5 版和 .NET Framework 3.0 版中,Windows Presentation Foundation (WPF) 和 Windows Workflow Foundation 都內附 XAML 語言實作。 有許多為 WPF XAML 實作提供擴充性的公用型別,都存在於 WindowsBase、PresentationCore 和 PresentationFramework 組件中。 同樣地,為 Windows Workflow Foundation XAML 提供擴充性的公用型別,則存在於 System.Workflow.ComponentModel 組件中。 在 .NET Framework 4 版 中,某些與 XAML 相關的型別已移轉至 System.Xaml 組件。 .NET Framework 有一項常見的 XAML 語言服務實作,可用以執行許多 XAML 擴充性情節,這些情節原先由特定架構的 XAML 實作所定義,但現在已納入整體 .NET Framework 4 XAML 語言支援中。 本主題會列出這些移轉的型別,並討論移轉的相關議題。

這個主題包含下列章節。

  • 組件和命名空間
  • MarkupExtension
  • 支援服務類別的 MarkupExtension
  • XAML 語言功能
  • ValueSerializer 和支援類別
  • XAML 相關屬性
  • 其他類別
  • 在 WPF 和 System.Xaml 中具有共用名稱的 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 命名空間對應。 因此,.NET Framework 4 中的 System.Windows.Markup 命名空間會同時包含一般 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 中,WPF 的 MarkupExtension 類別是位於 WindowsBase 組件中。 Windows Workflow Foundation 的平行類別 MarkupExtension 則存在於 System.Workflow.ComponentModel 組件中。 在 .NET Framework 4 中,MarkupExtension 類別已移轉至 System.Xaml 組件。 在 .NET Framework 4 中,MarkupExtension 主要運用在任何使用 .NET Framework XAML 服務的 XAML 擴充性情節中,而不僅運用於建置在特定架構上的 XAML 擴充性情節。進行 XAML 擴充時,也應盡可能將特定架構或架構內的使用者程式碼建置在 MarkupExtension 類別上。

支援服務類別的 MarkupExtension

過去 WPF 適用的 .NET Framework 3.5 和 .NET Framework 3.0 提供了數項服務,可供 MarkupExtension 實作者和 TypeConverter 實作使用,以支援 XAML 中的型別/屬性運用。 這些服務包括:

注意事項注意事項

IReceiveMarkupExtension 介面是 .NET Framework 3.5 中另一項與標記延伸有關的服務。IReceiveMarkupExtension 並未移轉,且在 .NET Framework 4 中已標記為 [Obsolete]。先前使用 IReceiveMarkupExtension 的情節,現應改用 XamlSetMarkupExtensionAttribute 屬性化回呼。AcceptedMarkupExtensionExpressionTypeAttribute 同樣也已標記為 [Obsolete]。

XAML 語言功能

有數項 WPF 適用的 XAML 語言功能和元件先前存在於 PresentationFramework 組件中。 這些是以 MarkupExtension 子類別的形式實作,以在 XAML 標記中公開標記延伸方式。 在 .NET Framework 4 中,這些會存在於 System.Xaml 組件中,讓不含 WPF 組件的專案可以使用這些 XAML 語言層級功能。 在執行 .NET Framework 4 應用程式時,WPF 同樣也會使用這些實作。 如本主題所列的其他情況,支援型別會繼續存在於 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 這個屬性會具有下列特性:由在 System.Xaml 實作中的 XAML 讀取器和 XAML 寫入器處理、可以附註在 XAML 節點資料流中、在預設 (CLR 型) XAML 結構描述內容中有處理邏輯、具有 XAML 型別系統表示等等。 因此,所有 XAML 語言層級功能的參考文件,都會是 XAML 服務和 .NET Framework 文件集該一般區域的子主題,而不會是 WPF 文件集中 WPF 基本概念的子主題 (在 3.5 文件集中仍為如此)。

ValueSerializer 和支援類別

ValueSerializer 類別支援將型別轉換成字串型別,尤其是在 XAML 序列化需要輸出中有多個模式或節點時。 在 .NET Framework 3.5 和 .NET Framework 3.0 中,WPF 的 ValueSerializer 是位於 WindowsBase 組件中。 在 .NET Framework 4 中,ValueSerializer 類別位於 System.Xaml 中,而且主要運用於任何 XAML 擴充性情節中,而不僅運用於建置在 WPF 上的擴充性情節。IValueSerializerContext (支援服務) 和 DateTimeValueSerializer (特定子類別) 也會移轉至 System.Xaml。

XAML 相關屬性

WPF XAML 內附數個屬性,這些屬性可套用至 CLR 型別,以針對其 XAML 行為表示相關資訊。 下列清單列出存在於 .NET Framework 3.5 和 .NET Framework 3.0 的 WPF 組件中的屬性。這些屬性在 .NET Framework 4 中已移轉至 System.Xaml。

其他類別

在 .NET Framework 3.5 和 .NET Framework 3.0 中,IComponentConnector 介面存在於 WindowsBase 中,但在 .NET Framework 4 中則存在於 System.Xaml 中。IComponentConnector 主要運用於工具支援和 XAML 標記編譯器。

在 .NET Framework 3.5 和 .NET Framework 3.0 中,INameScope 介面存在於 WindowsBase 中,但在 .NET Framework 4 中則存在於 System.Xaml 中。INameScope 會定義 XAML 命名空間的基本作業。

在 WPF 和 System.Xaml 中具有共用名稱的 XAML 相關類別

在 .NET Framework 4 中,下列類別同時存在於 WPF 組件和 System.Xaml 組件中:

XamlReader

XamlWriter

XamlParseException

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

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

請參閱

概念

XAML 服務