XamlReader 类

定义

提供一个 XAML 处理器引擎,用于分析 XAML 并创建相应的对象树。

public ref class XamlReader sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class XamlReader final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class XamlReader
Public NotInheritable Class XamlReader
继承
Object Platform::Object IInspectable XamlReader
属性

Windows 要求

设备系列
Windows 10 (在 10.0.10240.0 中引入)
API contract
Windows.Foundation.UniversalApiContract (在 v1.0 中引入)

示例

此示例从调用 Load 的 XAML 字符串创建单个 Ellipse。 然后,它将已创建但断开连接的 Ellipse 连接到正在运行的 UWP 应用中已存在的元素的 Children 集合。 最后,该 示例再次访问 使用查询添加椭圆的位置,并更改其属性之一。

string xaml =
"<Ellipse Name=\"EllipseAdded\" Width=\"300.5\" Height=\"200\" 
Fill=\"Red\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"/>";
object ellipse = XamlReader.Load(xaml);
//stackPanelRoot is the visual root of a Page in existing XAML markup already loaded by the appmodel
stackPanelRoot.Children.Add(ellipse as UIElement);
//walk the tree using XLinq result and cast back to a XAML type to set a property on it at runtime
var result = (from item in stackPanelRoot.Children
  where (item is FrameworkElement) 
  && ((FrameworkElement) item).Name == "EllipseAdded"
  select item as FrameworkElement).FirstOrDefault();
((Ellipse) result).Fill = new SolidColorBrush(Colors.Yellow);

注解

XamlReader 是一个实用工具类,其方法基于字符串形式的 XAML 标记的输入创建对象。 XamlReader 提供的对象构造行为与Windows 运行时 XAML 分析器分析 XAML 的方式以及使用 XAML 定义 UWP 应用的 UI 的方式并行。

使用 XamlReader.Load 分析 XAML 输入会生成Windows 运行时对象的运行时对象树。 对象树提供了一种在运行时对这些对象进行编程的方法,方法是遍历整个树的各个部分。

使用 XamlReader.Load 方法从 XAML 创建对象时,需要了解几个概念:

  • XAML 内容字符串必须定义单个根元素。
  • XAML 内容字符串必须是格式正确的 XML,并且必须是有效的 XAML。
  • XAML 内容必须定义默认 xmlns。 通常,这是Windows 运行时 XAML 词汇表,由 http://schemas.microsoft.com/winfx/2006/xaml/presentation标识。
  • XAML 命名空间映射中引用的任何自定义程序集都必须已可供应用程序使用。
  • XAML 不应尝试指定 x:Class 属性,也不应包含事件处理程序的任何 XAML 定义的属性。
  • 不能在常规 XAML 名称范围中使用 FindName 来查找添加的运行时对象,但可以在所创建对象的特定 XAML 名称范围内搜索。 有关详细信息,请参阅 XAML 空间范围
  • 对象创建逻辑无法在运行时将加载的 XAML 与代码隐藏类集成。 如果要添加事件处理程序,则必须在代码中执行此操作,方法是引用从 Load 结果的对象树结构中获取的对象,并使用特定于语言的语法来附加处理程序 (,例如 +=) 。
  • 必须存在现有的 XAML 内容;无法替换整个内容树。 至少必须保留原始根元素,以便加载的 XAML 页面的应用模型影响保持活动状态。
  • Load 创建的对象只能分配到主对象树中的一个位置。 如果要从相同的 XAML 创建的对象添加到应用程序的主要对象树的不同区域,则必须使用同一输入字符串多次分析 XAML,并使用不同的目标返回值。
  • 剩余的主对象树必须支持要设置的相应属性。

方法

Load(String)

分析格式正确的 XAML 片段并创建相应的对象树,并返回对象树的根。

LoadWithInitialTemplateValidation(String)

分析格式正确的 XAML 片段会创建相应的对象树,并返回对象树的根。 还对任何链接的模板执行加载时验证。

适用于

另请参阅