2012年8月30日星期四

SilverLight 学习篇八

SilverLight 学习篇八

Silverlight API 将它的一组对象定义为对象树,这样您可以通过加载 XAML 来填充基于 Silverlight 的应用程序的初始内容,然后在运行时调整对象树。在托管 API 中,与 Silverlight 对象树的交互是通过托管代码定义的。使用 CLR 可将托管代码编译为程序集。该程序集通常还包含用于基于 Silverlight 应用程序的 XAML。托管代码可支持 Silverlight 应用程序模型,可以调用托管代码以响应对象生存期事件或用户启动事件。还可以使用托管代码编写支持类,定义数据对象以及用于许多其他应用程序方案。您还可以使用 DLR 而不是 CLR,Silverlight 中的动态语言 对此进行了讨论。

托管 API 的特性

托管代码是可扩展的

在以前的 Silverlight 1.0 中和当前的 JavaScript API(与客户端版本无关)中,不支持定义真正的自定义 UI 元素。您可以合成一个元素,然后从同一定义 XAML 多次加载它,并将相同的函数指定为代码支持,但这种方法不支持大型扩展。使用托管 API,扩展实质上只是从支持有用基本功能的现有类或控件派生,可能还包括定义某些支持元素,例如新控件模板、更新的类特定的事件处理程序等。扩展托管代码是托管编程和 .NET Framework 编程的基本概念,在 Silverlight 文档中没有专门的主题,但下列主题可能非常有用:

  • 公共语言运行时

  • 控件自定义

  • XAML 和自定义类

  • 自定义依赖项对象和依赖项属性

对象树

对象树概念存在于 JavaScript API 中,但在该模型中操作对象树在某种程度上受对象构造方法缺乏的限制。在托管 API 中,可以对类调用构造函数,无需使用 XAML 分析器作为中间源即可向树添加对象。实际上,仅使用代码即可构建树的大部分,方法是:连续调用构造函数,从根开始向对象树添加对象,然后完成各种"子"属性。有关如何通过代码使用 Silverlight 对象树的更多信息,请参见 Silverlight 对象树。

托管代码隐藏和分部类

在 Silverlight 中定义 UI 的主要方法是在 XAML 标记中定义相应的元素。这可能包括使用样式和模板,它们也是在 XAML 标记中定义的。很多情况下,需要将标记分解为与 Silverlight 应用程序模型集成的不同 XAML 文件。为了定义应用程序所需的交互,通常需要为 XAML 中定义的对象定义事件处理程序,以响应对象生存期事件或用户启动事件。在托管 API 中,需要事件处理的每个 XAML 页或其中的 XAML 要作为根元素内容的每个 XAML 页必须作为生成的一部分进行标记编译处理。标记编译处理提供了必要的挂接,以便与加载 XAML 页时创建对象树进行运行时交互。这些挂接包括在 XAML 中赋予其 Name 或 x:Name 的任何对象的事件处理程序和引用。在 Silverlight 体系结构中,XAML 不进行完整编译。在运行时将 XAML 页真正加载到应用程序中并由 Silverlight XAML 分析器处理之前,会推迟创建来自 UI 的 XAML 标记的大部分对象树。代码隐藏和分部类中对这些概念进行了更加详细的说明。

规范化 DOM 交互

在 JavaScript API 中,可以非正式地从 Silverlight 脚本引用 HTML DOM 中的对象或变量,反之亦然,这是因为脚本由同一浏览器脚本引擎解释并可能位于同一个作用域中。在托管 API 中存在更正式的分离,因为托管代码由 Silverlight 核心库及其 CLR 使用,而不是由浏览器使用。为了从托管 API 与 DOM 进行交互,可以使用一系列功能,这些功能有时统称为 HTML Bridge,或 HTML DOM Bridge。这些功能包括:

  • 将 DOM 的常用部分(如 Document 对象

  • 使托管类型可从 DOM 编写的功能。
  • 用于从封送 JavaScript 值或对象生成托管类型的转换技术。
  • 专门用来在 DOM 中公开 Silverlight 插件的对象表示形式的 API。

TAG: