【问题标题】:What are backing types?什么是支持类型?
【发布时间】:2012-02-01 20:14:24
【问题描述】:

我不太明白这是什么意思(MSDN):

XAML directly represents the instantiation of objects in a specific set of backing types defined in assemblies. This is unlike most other markup languages, which are typically an interpreted language without such a direct tie to a backing type system.

什么是后备类型和后备类型系统?这些集合文件中是否定义了 XAML 的标签?

【问题讨论】:

    标签: .net wpf xaml types assemblies


    【解决方案1】:

    Backing Types 在这里仅表示存在与您的 XAML 声明匹配的特定直接等效类。您的 XAML 是标记 - 但 WPF 程序集具有完全匹配的“备份”类。

    这与 HTML 不同;您的网络浏览器可能没有一个名为 img 的类来匹配您的 <img> 标签。它实际上可能;但 HTML 并不意味着代表不同的支持类型。另一方面,XAML 意味着在其对象标记和代码中的实际类之间具有一对一的关系。

    【讨论】:

    • 感谢您的解释。它们在解析/编译过程中扮演什么角色,如果没有支持类型会有什么不同?我的意思是为什么我们有它们?
    • 支持类型所扮演的角色是它们必须存在并且能够使用 XAML 中定义的属性和值,就像在传统的“代码”中一样,您使用的类型名称必须存在并且您调用的属性/方法必须正确。
    • 我们为什么拥有它们?它们实现了 WPF 的功能。 XAML 只是编写 WPF 的一种方式。您也可以使用直接的 C#/VB.NET 来完成。但是您总是使用 WPF 类来执行此操作。将支持类型绑定到已定义的 XAML 标记可以让您更轻松地在代码/标记之间来回切换并了解正在发生的事情。
    • 再次感谢您。所以直接 C#/VB.NET 也使用支持类型,它们只是编写指令的不同方式。解析代码后,通过将解析器连接到支持类型来构建生成代码?我主要完成了理论 CS 和数学,并试图围绕这个过程进行思考。
    • 我没有资格在这里挑剔确切的术语,但你有这个想法;您可以想象解析器正在获取您的有效 XAML 并将其转换为您也可以用 C#/VB.NET/etc 编写的代码。 XAML 往往更清楚地定义接口。
    【解决方案2】:

    粗略地说,XAML 是一种用于描述对象树的实例化和各种属性设置的语言。因此,它与 CLR 及其类型系统密切相关。它非常强大,并且被 WPF 广泛使用,尽管没有什么可以阻止您将它用于其他类型的对象树。

    使用此命名空间定义使 XAML 成为“特定于 WPF 的”:

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    这告诉 XAML 解析器默认命名空间应如上定义,然后映射到所有各种 WPF 类类型。此 URL 由包含 WPF 特定类型的各种程序集定义,方法是在每个程序集上定义一个或多个 XmlnsDefinitionAttribute,将各种程序集命名空间映射到 XML 命名空间。


    有关 XAML 含义的更多信息,请参阅XAML Syntax In Detail。那里还有一个指向 XAML 语言规范的链接。值得注意的是,XAML 是一种编译语言,其产物是一个可以实例化的 .NET 类。它是一种旨在有效描述深度嵌套和复杂内容的语言,具有属性值分配和向集合添加元素,这在 C# 中可能很难做到。不过,XAML 编译器确实支持代码隐藏,它允许您将其他 C# 代码与 XAML 构造的类相关联。

    【讨论】:

    • 谢谢。因此,从本质上讲,命名空间定义了从支持类型派生的 XML 的所有标签。
    • @mihajlv,是的,XML 命名空间有效地映射到一个或多个 .NET 命名空间。然后,您可以使用无参数构造函数从这些命名空间实例化任何公共类,方法是将其类名作为 XAML 中的元素输入。支持“内容”的类可以在其下方包含其他元素,这些元素可以设置属性以包含内容或将内容添加到基础集合中。 MS 详细记录了详细信息,如果您有兴趣,值得仔细阅读。
    • 谢谢,我能知道你指的是什么文档吗?
    猜你喜欢
    • 1970-01-01
    • 2011-04-19
    • 2016-10-07
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 2018-04-02
    • 2020-10-14
    相关资源
    最近更新 更多