XamlReader 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
使用 WPF 默认 XAML 读取器和关联的 XAML 对象编写器读取 XAML 输入并创建对象图。
public ref class XamlReader
public class XamlReader
type XamlReader = class
Public Class XamlReader
- 继承
-
XamlReader
示例
以下示例使用XamlWriter类将 a Button 转换为字符串。 然后,该字符串将加载回Button类上的静态Load方法。XamlReader
// Create the Button.
Button originalButton = new Button();
originalButton.Height = 50;
originalButton.Width = 100;
originalButton.Background = Brushes.AliceBlue;
originalButton.Content = "Click Me";
// Save the Button to a string.
string savedButton = XamlWriter.Save(originalButton);
// Load the button
StringReader stringReader = new StringReader(savedButton);
XmlReader xmlReader = XmlReader.Create(stringReader);
Button readerLoadButton = (Button)XamlReader.Load(xmlReader);
' Create the Button.
Dim originalButton As New Button()
originalButton.Height = 50
originalButton.Width = 100
originalButton.Background = Brushes.AliceBlue
originalButton.Content = "Click Me"
' Save the Button to a string.
Dim savedButton As String = XamlWriter.Save(originalButton)
' Load the button
Dim stringReader As New StringReader(savedButton)
Dim xmlReader As XmlReader = XmlReader.Create(stringReader)
Dim readerLoadButton As Button = CType(XamlReader.Load(xmlReader), Button)
注解
同步 Load 方法是静态的,但异步 LoadAsync 方法不是静态的,需要类的 XamlReader 实例才能使用。
方法的 Load
输出是单个对象,表示所创建对象树或对象图的根对象。 创建的对象图 XamlReader 通常在运行时添加到 WPF 应用程序的现有对象树中。 否则,出于 WPF 应用程序模型的目的,新对象图被视为断开连接。 这意味着它不会呈现,并且无法使用应用于 WPF 应用程序的主对象树 (的任何对象树技术(例如 APIFindName、 LogicalTreeHelperVisualTreeHelper) )访问。 有关对象树概念的详细信息,请参阅 WPF 中的树。
XamlReader 支持以下主要方案:
克隆/对象工厂:如果没有其他机制,引用类型通常不能包含在 WPF 对象树中的多个位置。 (支持在 WPF 中共享或重复使用的其他机制的示例包括基于 Freezable的对象,或对可共享对象的支持,例如 Brush ,从 ResourceDictionary.) 克隆对象树中已有的对象的一种方法是使用 XamlWriter.Save序列化对象。 然后,使用序列化字符串作为对流或XmlReader中间的调用Load的输入。
基于实时信息构造对象:通常还有其他方法可以具有后期绑定或用户提供的输入更改现有对象的状态。 例如,可以使用相同的值来设置多个属性,或使用数据绑定。 但是,如果你有一个场景,即使要创建的对象类型只能在运行时或用户交互时确定,那么通过为输入构建字符串 Load 来创建此类对象通常是一种有用的技术。
使用现有资源技术:此 Stream 类型经常在其他框架或技术中用于跨应用程序边界传输数据或对象,或者用于类似情况。 然后 Stream ,可以使用这些技术来存储或获取最终用于创建对象作为应用程序的一部分的 XAML 格式的数据。
已修复文档: 应用程序可能会加载本地或下载的 XPS 文档,以包含在 WPF 应用程序对象树和 UI 中。
备注
本文档有时会描述对象图,而不是对象树。 在运行时 WPF 应用程序的运行时对象关系中并不总是存在严格的父子关系,因此对象图是一个更广泛的适用术语。 但是,由于 WPF 还包含两个不同的树概念化 API (LogicalTreeHelper, VisualTreeHelper 因此) 树隐喻仍适用于 WPF 中的大多数实际情况。 但是,从 XAML 语言的角度来看,对象图通常是考虑如何通过 XAML 创建对象的最佳方法,因为 XAML 语言本身不一定指定帮助程序类方法,以便将关系再次引入树结构。
代码访问安全性、松散 XAML 和 XamlReader
XAML 是一种直接表示对象实例化和执行的标记语言。 因此,在 XAML 中创建的元素能够像等效的生成代码那样与系统资源(如网络访问、文件系统 IO)进行交互。
WPF 支持 .NET 安全框架代码访问安全性 (CAS) 。 这意味着在 Internet 区域中运行的 WPF 内容具有缩减的执行权限。 XAML 查看器) 和 XAML 浏览器应用程序 (XBAP) 在加载时解释的非编译 XAML 的“松散 XAML” (页通常在此 Internet 区域中运行,并使用相同的权限集。 但是,加载到完全受信任的应用程序中的 XAML 与承载应用程序具有相同的系统资源访问权限。 有关详细信息,请参阅 WPF 部分信任安全性。
这些语句 XamlReader 的含义是,应用程序设计必须对决定加载的 XAML 做出信任决策。 如果要加载不受信任的 XAML,请考虑实现自己的沙盒技术,以便如何加载生成的对象图。
XamlReader 也可以由部分信任代码调用。 在这种情况下,Internet 安全区域将应用于代码访问安全性。 如果加载的 XAML 中的任何内容在 Internet 安全区域中无效,则会引发 XAML 分析异常。 在平台级别部分信任的 XBAP 和其他部分信任情况下, XamlReader 你将获得与显式部分信任调用相同的异常行为。
WPF XAML、XAML 读取器/编写器和 XAML 语言版本控制
XAML2009 包括 x:Reference 和 x:FactoryMethod 等语言功能。 可以使用 Load
签名或 Parse
加载使用这些功能的 XAML。 但是,XAML 不支持这些语言功能,这些语言功能需要 ((例如 WPF 应用程序中 页面 生成操作的 XAML)进行标记编译,或者任何涉及生成操作中标记编译任务的 XAML) 。
WPF 类型和 WPF 技术通常支持依赖于对 WPF 内部人员的访问权限的概念。 例如,WPF 如何实现依赖属性依赖于内部技术来实现高效的类型成员查找。 XAML 读取和写入命名空间和 PresentationFramework 程序集中 XamlWriter XamlReader System.Windows.Markup 提供的 API 支持对这些内部函数的访问。 但是,基于 System.Xaml 程序集的较低级别的 XAML 读取器和 XAML 编写器 (类 System.Xaml.XamlReader, System.Xaml.XamlWriter) 无权访问 WPF 内部组件。 没有从 System.Xaml 到任何特定于 WPF 的程序集的依赖项。 如果无法访问 WPF 内部程序,System.Xaml 读取器和编写器无法正确加载或保存所有 WPF 类型或基于 WPF 类型的类型。 具体而言,System.Xaml 读取器和编写器不了解 WPF 依赖属性支持属性存储等概念,也不了解 WPF 如何使用样式、资源字典和模板的所有细节。 因此,可以选择:
如果要以任何方式加载 WPF 类型和/或以 BAML 形式使用 XAML,请使用 PresentationFramework XAML 读取器和 XAML 编写器。
如果不依赖于任何 WPF 类型或 XAML 的 BAML 形式,并且由于特定于该框架的原因,不使用其他特定技术的 XAML 读取器或 XAML 编写器实现,请使用 System.Xaml XAML 读取器和 XAML 编写器。
.NET 4 中的 System.Xaml 支持实现
XamlReader 是 WPF 框架级 XAML 分析器可调用的 API 图面。 相同的基础 XAML 分析程序还对面向 .NET Framework 3.0 和 .NET Framework 3.5 的 WPF 应用程序执行运行时 XAML 加载和分析。
如果以 .NET Framework 4 为目标,则外部 API 是相同的,但实现的一部分基于 System.Xaml 程序集中的 .NET Framework 4 常规 XAML 实现构建,从而改进了分析 XAML 的许多技术和报告方面。 面向 .NET Framework 4 必然需要包括 System.Xaml 作为引用,并且所报告的异常等实现的详细信息可能来自 System.Xaml 定义类型。
构造函数
XamlReader() |
初始化 XamlReader 类的新实例。 |
方法
事件
LoadCompleted |
在异步加载操作完成时发生。 |