從 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 語言支援中。 本文會列出移轉的類型,並討論與移轉相關的問題。
組件和命名空間
在 .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 XAML 服務的 XAML 擴充性情節,而不只是用於建置在特定架構上的情節。 進行 XAML 擴充時,也應盡可能將特定架構或架構中的使用者程式碼建置在 MarkupExtension 類別上。
支援服務類別的 MarkupExtension
.NET Framework 3.5 和適用於 WPF 的 .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 語言層級功能。 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 中,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。
其他類別
IComponentConnector 介面存在於 .NET Framework 3.5 和 .NET Framework 3.0 的 WindowsBase 中,但存在於 .NET Framework 4 中的 System.Xaml 中。 IComponentConnector 主要用於工具支援和 XAML 標記編譯器。
IComponentConnector 介面存在於 .NET Framework 3.5 和 .NET Framework 3.0 的 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 類型,通常應使用 XamlReader 和 XamlWriter 的 WPF 實作,而不是 System.Xaml 實作。 如需詳細資訊,請參閱 System.Windows.Markup.XamlReader 和 System.Windows.Markup.XamlWriter中的<備註>。
如果您同時納入 WPF 組件和 System.Xaml 的參考,並且同時對 include
和 System.Windows.Markup 命名空間使用 System.Xaml 陳述式,則您可能必須完整限定對這些 API 的呼叫,以明確解析類型。