在 .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 程序集。 XAML 语言服务的一个常见 .NET Framework 实现支持最初由特定框架的 XAML 实现定义的很多 XAML 扩展性方案,但是现在这些方案都属于整体 .NET Framework 4 XAML 语言支持的一部分。 本主题列出了迁移的类型并讨论了与迁移有关的问题。
本主题包括下列各节。
- 程序集和命名空间
- MarkupExtension
- MarkupExtension 支持服务类
- XAML 语言功能
- ValueSerializer 和支持类
- 与 XAML 有关的特性
- 其他类
- 具有共享名称的与 XAML 有关的类存在于 WPF 和 System.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 程序集)的类型。 在版本 4 的 WPF 程序集中,已迁移到 System.Xaml,但以前存在于 WPF 程序集中的任何类型都具有类型转发支持。
工作流 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 的 Parallel 类 MarkupExtension 存在于 System.Workflow.ComponentModel 程序集中。 在 .NET Framework 4 中,MarkupExtension 类被迁移到 System.Xaml 程序集中。 在 .NET Framework 4 中,MarkupExtension 适用于使用 .NET Framework XAML 服务的任何 XAML 扩展性方案,而不仅仅用于在特定框架上生成的方案。如果可能,特定框架或框架中的用户代码也应在 XAML 扩展的 MarkupExtension 类上生成。
MarkupExtension 支持服务类
WPF 的 .NET Framework 3.5 和 .NET Framework 3.0 提供了很多服务,这些服务可用于 MarkupExtension 实施者和 TypeConverter 实现以支持 XAML 中的类型/属性用法。 这些服务如下:
![]() |
---|
来自 .NET Framework 3.5 且与标记扩展有关的另一个服务是 IReceiveMarkupExtension 接口。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 语言功能 |
用法 |
---|---|
<x:Array ...> |
|
{x:Null} |
|
{x:Static ...} |
|
{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 名称范围的基本操作。
具有共享名称的与 XAML 有关的类存在于 WPF 和 System.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 的引用,而且还对 System.Windows.Markup 和 System.Xaml 命名空间使用 include 语句,则可能需要完全限定对这些 API 的调用,以便清楚无误地解析类型。