XamlReader 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供一个 XAML 处理器引擎,用于分析 XAML 和创建相应的对象树。
public ref class XamlReader sealed
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 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(Microsoft.UI.Xaml.WinUIContract), 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
- 继承
- 属性
示例
此示例根据调用 Load 的 XAML 字符串创建单个椭圆。 然后,它将已创建但断开连接的 椭圆 连接到正在运行的 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。 通常,这是由 标识
http://schemas.microsoft.com/winfx/2006/xaml/presentation
的Windows 运行时 XAML 词汇。 - XAML 命名空间映射中引用的任何自定义程序集都必须对应用程序可用。
- XAML 不应尝试指定 x:Class 属性,也不应包含事件处理程序的任何 XAML 定义的属性。
- 不能在常规 XAML 名称范围中使用 FindName 来查找添加的运行时对象,但可以在所创建对象的特定 XAML 名称范围内搜索。 有关详细信息,请参阅 XAML 空间范围。
- 对象创建逻辑无法在运行时将加载的 XAML 与代码隐藏类集成。 如果要添加事件处理程序,必须在代码中执行此操作,方法是引用从 Load 结果的对象树结构中获取的对象,并使用特定于语言的语法附加处理程序 (,例如
+=
) 。 - 必须存在现有的 XAML 内容;不能替换整个内容树。 至少必须保留原始根元素,以便加载的 XAML 页面的应用模型含义保持活动状态。
- 从 Load 创建的对象只能分配到主对象树中的一个位置。 如果要将从相同 XAML 创建的对象添加到应用程序主对象树的不同区域,则必须使用相同的输入字符串多次分析 XAML,为返回值使用不同的目标。
- 剩余的主对象树必须支持要设置的相应属性。
方法
Load(String) |
分析格式正确的 XAML 片段并创建相应的对象树,并返回对象树的根。 |
LoadWithInitialTemplateValidation(String) |
分析格式正确的 XAML 片段并创建相应的对象树,并返回对象树的根。 还对任何链接的模板执行加载时验证。 |