Silverlight的托管API2011-09-29msdnSilverlight 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 中定义 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 对象)公开给托管代码的 API。使托管类型可从 DOM 编写的功能。用于从封送 JavaScript 值或对象生成托管类型的转换技术。专门用来在 DOM 中公开 Silverlight 插件的对象表示形式的 API。