x:Subclass 属性

更新:2007 年 11 月

在同时提供了 x:Class 的情况下修改 XAML 编译行为。具体而言,不必根据页类创建分部类,而是将提供的 x:Class 创建为中间类,并且期望您提供的派生类基于 x:Class。

XAML 属性用法

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

XAML 值

namespace

可选。指定一个包含 classname 的 CLR 命名空间。如果指定了 namespace,则用一个点 (.) 来分隔 namespace 和 classname。

classname

必需。指定连接加载的 XAML 和该 XAML 的代码隐藏的分部类的 CLR 名称。请参见“备注”。

subclassNamespace

可选。只要每个命名空间可以解析另一个命名空间,该值可以不同于 namespace。指定一个包含 subclassName 的 CLR 命名空间。如果指定了 subclassName,则用一个点 (.) 来分隔 subclassNamespace 和 subclassName。

subclassName

必需。指定子类的 CLR 名称。

依赖项

还必须对同一元素提供 x:Class 属性 并且该元素必须是页中的根元素。

备注

x:Subclass 用法主要针对不支持分部类声明的语言。

可以针对作为可扩展应用程序标记语言 (XAML) 页的根的任何元素和/或应用程序定义中的 Application 根(已提供 x:Class)来声明 x:Subclass。无论对页或应用程序根之外的任何元素声明 x:Subclass ,还是在不存在 x:Class 的情况下指定它,都会引发编译时错误。

创建完全适用于 x:Subclass 方案的派生类非常复杂。您可能需要检查中间文件(项目的 obj 文件夹中产生的 .g 文件,其名称合并了 .xaml 文件名)。这些中间文件有助于在编译的应用程序的联接分部类中确定某些编程构造的源。

用作 x:Subclass 的类不能是嵌套类。

派生类中的事件处理程序必须是 internal override(在 Microsoft Visual Basic .NET 中必须是 Friend Overrides),才能重写编译期间在中间类中创建的处理程序的存根。否则,派生类实现将隐藏中间类实现,并且中间类处理程序无法被调用。

如果您既定义了 x:Class,又定义了 x:Subclass ,则不必为 x:Class 引用的类提供任何实现。您只需通过 x:Class 属性为它指定一个名称,以便编译器为在中间文件中创建的类提供一些指导(此时编译器不会选择默认名称)。如果需要,您可以为 x:Class 类指定一个实现,但是通常不会针对同时使用 x:Class 和 x:Subclass 的典型方案执行此操作。

请参见

概念

XAML 和自定义类

参考

x:Class 属性