x:Class 指令

配置 XAML 标记编译,以在标记和代码隐藏之间联接分部类。 代码分部类在一个独立的代码文件中采用公共语言规范 (CLS) 语言进行定义,而标记分部类通常由代码生成过程在 XAML 编译期间创建。

XAML 属性用法

<object x:Class="namespace.classname"...>
  ...
</object>

XAML 值

说明
namespace 可选。 指定一个包含 classname 所标识的分部类的 CLR 命名空间。 如果已指定 namespace,则用点 (.) 分隔 namespaceclassname。 请参阅“备注”。
classname 必需。 指定分部类的 CLR 名称,该分部类连接已加载的 XAML 和该 XAML 的代码隐藏。

依赖项

只能在 XAML 生产的根元素上指定 x:Classx:Class 在 XAML 生产中具有父级的任何对象上均无效。 有关详细信息,请参阅 [MS-XAML] 第 6.3.1.6 节

备注

namespace 值可能包含其他点,以便将相关命名空间组织到名称层次结构中,这是 .NET 编程中的常见技术。 只有 x:Class 值的字符串中的最后一个点会被解读为分隔 namespaceclassname.。用作 x:Class 的类不能是嵌套类。 不允许使用嵌套类,因为如果允许嵌套类,将难以确定 x:Class 字符串中点的含义。

在使用 x:Class 的现有编程模型中,x:Class 是可选的,因为没有代码隐藏的 XAML 页面是完全有效的。 但是,该功能与使用 XAML 的框架所实现的生成操作进行交互。 x:Class 功能还受各种类别的 XAML 指定内容在应用程序模型和相应生成操作中所拥有的角色的影响。 如果 XAML 声明事件处理特性值或实例化自定义元素(定义类位于代码隐藏类中),则必须提供代码隐藏的相应类的 x:Class 指令引用(或 x:Subclass)。

x:Class 指令的值必须是一个字符串,其中指定类的完全限定名称,但没有任何程序集信息(等效于 Type.FullName)。 对于简单的应用程序,如果代码隐藏也是以这种方式构建的,则可以省略 CLR 命名空间信息(代码定义从类级别开始)。

一个页面或应用程序定义的代码隐藏文件必须在一个代码文件中,并且该代码文件包含在生成编辑应用程序和涉及标记编译的项目中。 必须遵循 CLR 类的名称规则。 有关详细信息,请查看框架设计准则。 默认情况下,代码隐藏类必须是 public;但是,可以使用 x:ClassModifier 指令在不同的访问级别定义该类。

x:Class 特性的这种解释仅适用于基于 CLR 的 XAML 实现,尤其是 .NET XAML 服务。 其他不基于 CLR 且不使用 .NET XAML 服务的 XAML 实现可能会使用不同的解析公式来连接 XAML 标记和支持运行时代码。 有关 x:Class 的更多常规解释的详细信息,请参阅 [MS-XAML]

在某些级别的体系结构中,.NET XAML 服务中未定义 x:Class 的含义。 这是因为 .NET XAML 服务未指定连接 XAML 标记和支持代码的编程模型。 可以使用特定框架来实现 x:Class 指令的其他用法,这些框架使用编程模型或应用程序模型来定义如何连接 XAML 标记和基于 CLR 的代码隐藏。 每个框架可以有其自己的生成操作(用于实现某些行为)或特定组件(必须包含在生成环境中)。 在框架中,生成操作也可能因用于代码隐藏的特定 CLR 语言而异。

WPF 编程模型中的 x:Class

在 WPF 应用程序和 WPF 应用程序模型中,可以将 x:Class 声明为作为 XAML 文件根且正在编译的任何元素的特性(其中 XAML 包含在具有 Page 生成操作的 WPF 应用程序项目中),或将其声明为编译 WPF 应用程序的应用程序定义中 Application 根的特性。 如果在页面根或应用程序根以外的元素上或在未编译的 WPF XAML 文件中声明 x:Class,则会导致 .NET Framework 3.0 和 .NET Framework 3.5 WPF XAML 编译器中出现编译时错误。 有关 WPF 中 x:Class 处理的其他方面的信息,请参阅 WPF 中的代码隐藏和 XAML

适用于 Windows Workflow Foundation 的 x:Class

对于 Windows Workflow Foundation,x:Class 将为完全以 XAML 编写的自定义活动的类命名,或者为具有代码隐藏的活动设计器的 XAML 页面的分部类命名。

Silverlight 使用注意事项

单独记录了 Silverlight 的 x:Class。 有关详细信息,请参阅 XAML 命名空间 (x:) 语言功能 (Silverlight)

另请参阅