XamlReader.ReadSubtree 方法

定义

返回基于当前 XamlReaderXamlReader,其中返回的 XamlReader 用于循环访问 XAML 节点结构。

public:
 virtual System::Xaml::XamlReader ^ ReadSubtree();
public virtual System.Xaml.XamlReader ReadSubtree ();
abstract member ReadSubtree : unit -> System.Xaml.XamlReader
override this.ReadSubtree : unit -> System.Xaml.XamlReader
Public Overridable Function ReadSubtree () As XamlReader

返回

子树的新 XAML 读取器实例。

注解

此方法具有默认实现,并返回有效的 XamlReader。 返回的 XamlReader 是限制某些 XamlReader 操作的内部类。 这些限制与仅读取 XAML 节点集较大源的维度子树,以及退出子树时返回文件末尾或 null 当前节点的子树的目的一致。

通常,应从初始 Read 值检查当前节点,以确定是否需要子树读取器。 检查方式可能特定于实现;但是,请避免为每个子树创建多个子树读取器。 此外,对于某些节点案例,避免调用子树读取器 (例如,对于 NamespaceDeclaration 不能包含节点子树的) 。

获取子树读取器后,必须对其进行调用 Read 以获取当前节点 (或调用 Skip 以获取下一个节点) 。 创建子树读取器时,不会自动从子树读取器获取初始节点位置。

通过调用 ReadSubtree 此默认实现获取的读取器是一个内部类。 内部类的行为基于 XamlReader 调用 时 ReadSubtree 使用的实现。 内部类的目的是包装 Read 和 常规遍历行为。 遍历通过跟踪 StartMember/EndMember 一个或多个 StartObject/EndObject 对来保留在预期的子树内。 当读取器falseRead位于子树的末尾时,它还正确返回 和 trueIsEof ,由其入口点定义。 通常,假设从子树读取器调用的任何 XamlReader API 的实现都与整体 XamlReader 实现相同,但遍历边界行为除外。

但是, ReadSubtree 是虚拟的。 因此,特定 XamlReader 实现可以提供不同于 XamlReader 内部包装器行为的行为; XamlReader 实现甚至可以通过返回 NotImplementedException 或其他异常来禁用子树读取器功能。

适用于