Silverlight对象树

在托管代码或 JavaScript 中,您可以在运行时期间引用 Silverlight 的 Silverlight 对象树中的 对象。本主题介绍如何在 Silverlight 托管 API 中使用对象树。

对象树

对象树概念描述如何使在运行时在 Silverlight 内容中创建和存在的对象彼此相关。关系基于对象具 有属性这一原则,在很多情况下属性的值是另一个对象,而此对象也具有属性。对象树具有分支,因为其 中某些属性是集合属性并具有多个对象;并且,对象树具有根,因为体系结构最终必须引用单个对象,而 该对象是与对象树之外的概念(例如,浏览器宿主或显示内容的 Silverlight 插件)之间的连接点。

尽管在概念上实际只有一个对象树,但 Silverlight API 不向您公开完整的树。大量的对象树结构实 际上是实现详细信息。而您具有对象特定的属性,这些属性影响树中特定点的子项值并且可能报告父项( 在大多数情况下,父轴是只读的,因为您通常是在代码中或通过 XAML 分析过程从根向上构建树)。例如 ,Panel 具有其 Children 属性,该属性设置子对象。FrameworkElement 具有用于报告父项的 Parent。 这两个 API 都在基类中,因此,它们可用于大量的 Silverlight 对象。

Silverlight 中一个相关的树概念是可视化树。可视化树概念指的是较大的对象树在经过编辑或筛选 后的表示形式。所应用的筛选器是在可视化树中只存在具有呈现含义的对象。例如,某个集合类不是可视 化树的一部分,而可视化树将集合抽象为一个“子项”概念。然而,如果您将加载的源 XAML 标记视为与 对象树近似的结构,则可视化树也可以包含并不直接显示的对象。这是因为,可视化树也报告作为特定控 件(这些控件来自所应用的控件模板或资源字典)的组成部分的对象。可视化树在内部用于 Silverlight 呈现过程,但了解一些有关可视化树的内容对于某些情形通常很重要,例如,在应用模板后编写或替换控 件模板或在运行时分析控件实例。对于这些情形,Silverlight 提供了 VisualTreeHelper API,它通过 一种方式检查可视化树,这种方式比您通过对象特定的父属性和子属性来实际实现更为一般化。

可视化树概念也存在于 WPF 中,它与 Silverlight 的可视化树概念类似。然而,一个显著的差异是 WPF 还提供一个附加的筛选器或对象树(称为“逻辑树”)的概念。逻辑树概念与某些属性系统行为相关 。Silverlight 不通过帮助器类来公开此逻辑树。Silverlight 中的确存在某些(但并非所有)相关的属 性行为,但由于没有用于访问这些行为的帮助器 API,因此,逻辑树概念在 Silverlight 中将没有用武 之地,因此本文档不讨论它。缺少逻辑树而引发的一个很小的兼容性问题是:FrameworkElement.Parent 属性行为在 Silverlight 版本 3 中是不同的,它实际上报告可视化树父项。

对象树和 XAML 标记

如果您将通过 Silverlight API 访问的对象树与 XAML 标记的树形状进行比较,它们在节点方面并不 完全匹配。这是因为 XAML 用于标记,并且在标记定义期间易于使用。例如,XAML 具有属性元素的概念 ,它提供相关的指导信息,当您发现一个元素嵌套在另一个元素内时,您可以选择要设置的属性。在对象 树中,这就像一个对象上的某个属性由另一个对象进行设置一样。相反,XAML 也具有内容属性的概念, 其中,所设置的属性在标记中甚至没有显式进行命名。XAML 具有的语法可以基于属性的字符串值创建对 象,也可以针对 XAML 标记中已存在但在其他位置定义的对象提供引用,或者完全位于标记外部。尽管存 在这些很小的不一致,但当您在 XAML 中定义用户界面时,您将在运行时定义最终 Silverlight 对象树 的近似结构。

引用对象属性

无论您通过何种方式从 Silverlight 对象树中获取对象引用,都将通过 object.property 表示法( 与 .NET 中 CLR 属性的核心概念相关)直接公开托管 API 中的属性。许多 Silverlight 2 属性的基础 是依赖项属性概念。依赖项属性和属性系统引入了一些其他可能的语法,用于通过与 object.property 不同的方式访问属性,但与附加属性的情况不同,这些属性并不常用,因此本主题不讨论它们。主题依赖 项属性概述中详细讨论了依赖项属性。

对象树中的附加属性

Silverlight 支持附加属性的概念。从对象树的角度来看,附加属性是可以附加到树中任何对象的属 性,而不考虑该对象的类型(尽管在 Silverlight 实现中,该对象至少必须是依赖项对象)。附加属性 值存在于对象树中,但是,如果您使用代码来访问它们,则必须使用与 object.property 表示法不同的 语法。

时间: 2024-12-29 08:49:16

Silverlight对象树的相关文章

[Qt教程] 第43篇 进阶(三)对象树与拥有权

[Qt教程] 第43篇 进阶(三)对象树与拥有权 楼主  发表于 2013-9-12 16:39:33 | 查看: 255| 回复: 1 对象树与拥有权 版权声明 该文章原创于Qter开源社区 导语 学习完前面的内容,大家对应用Qt编程应该已经有了一个大概的印象.后面的内容我们将介绍Qt中的一些核心机制,它们是构成Qt的基础,包括对象模型.信号和槽.对象树与拥有权等.在前面使用Qt编程时,大家对一些内容可能存在疑惑,学习完下面的知识,可以帮助大家更好的使用Qt进行编程. 环境:Windows X

Qt之对象树与所有权

简述 QObjects在一个对象树中组织他们自己.当创建一个QObject时,如果使用了其他对象作为其父对象,那么,它就会被添加到父对象的children()列表中.这样一来,当父对象被销毁时,这个QObject也会被销毁.事实表明,这个机制非常适合于管理GUI对象.例如:一个QShortcut(键盘快捷键)对象是相关窗口的一个子对象,所以,当用户关闭了这个窗口时,快捷键也会被销毁. 简述 详细描述 QObjects的构造销毁顺序 详细描述 QQuickItem是Qt Quick模块的基本视觉元

Silverlight编程模型、XAML和HTML DOM

基于 Silverlight 的应用程序使用浏览器宿主中的 Silverlight 插件通过一个基于浏览器的文档对 象模型 (DOM) 和一个包括对象树概念的特定于 Silverlight 的编程模型来公开其功能.如果使用 Silverlight 编程模型,则可以选择以下三个 API 变体之一:由浏览器解释的 JavaScript.托管代码或 由动态语言运行时 (DLR) 解释的动态语言.本主题讨论 DOM 与各可能的 API 变体之间的关系,此外, 还讨论各种 API 和应用程序模型如何使用

Silverlight的JavaScript API

在某些情况下,Silverlight 的 JavaScript API 是必需的或者比托管 API 更适合.本主题论述这些 情况并提供一些链接,这些链接指向有关 Silverlight 中 JavaScript API 的更多信息. 先决条件 您应该阅读应用程序和编程模型并理解托管 API 和 JavaScript API 之间的基本差异.还应理解 HTML DOM 以及 Silverlight 编程模型和对象树如何与浏览器 DOM 相关: 编程模型注意事项 Silverlight 的 Java

Silverlight:代码隐藏和分部类

代码隐藏是一个术语,用于描述在为某一应用程序进行标记编译时与 XAML 页 的分部类联接的代码.本主题描述针对代码隐藏类的要求.在代码隐藏中定义的 事件处理程序的要求以及与代码隐藏相关的机制(例如 InitializeComponent 方 法)的用途. 一般要求 *如果某一托管应用程序的 XAML 页进行了标记编译(Page 生成操作,且 MSBuild:MarkupCompilePass1 的值为"自定义工具"),则该页上的根元素应声 明一个 x:Class.作为回退,可能仅限代码

Silverlight-JavaScript API 中的 FindName、CreateFromXaml 和 XAML 名称范

对象树和 FindName 在 JavaScript API 中,初始对象树始终通过分析 XAML 来构造.除了一些能够分析字符串的类型转换用 法,加载 XAML 是在 JavaScript API 中"构造"对象的唯一方式.构造了这样的树之后,您通常会希望与该 对象树进行交互.为此,需要脚本对象引用树中的一个对象. 建立这样的引用的最佳方法是将 Name 或 x:Name 属性分配给计划在运行期间引用对象所在的 XAML 中的 任何对象元素.在 JavaScript API 中,名称

Silverlight 访问Javascript对象

在Silverlight中对Javascript的操作,主要用到System.Windows.Browser.HtmlPage.Window中提供的相关方法. 在HTML页面中有如下Javascript代码: <script type="text/javascript"> function GetBP(id) { //根据id通过ajax获取数据,省略. var bp = { "BH": "0102007009", "Nam

GPU硬件加速下Silverlight超性能动画实现(上)

Silverlight3发布时,我和朋友都为其新增的GPU硬件加速功能激动不已,于是开始了肆无忌惮的连夜测试 ,可结果却实在让我们大失所望.是的,不论怎样修改代码都无法感觉到明显的性能提升.接下来的日子里, GPU这个词渐渐的远离了我的脑海.直至几天前,在与一位朋友交流后又再次让我萌生去测试GPU硬件加速在 Silverlight4中效果的想法.真乃不测不知道,一测吓一跳.在最近Silverlight贬低声此起彼伏的日子里, 我相信这篇文章及测试结果必将成为Silverlight开发中最为强劲的

Silverlight的托管API

Silverlight API 将它的一组对象定义为对象树,这样您可以通过加载 XAML 来填充基于 Silverlight 的应用程序的初始内容,然后在运行时调整对象树.在托管 API 中,与 Silverlight 对 象树的交互是通过托管代码定义的.使用 CLR 可将托管代码编译为程序集.该程序集通常还包含用于基 于 Silverlight 应用程序的 XAML.托管代码可支持 Silverlight 应用程序模型,可以调用托管代码以 响应对象生存期事件或用户启动事件.还可以使用托管代码编