XamlReader Classe

Definição

Lê a entrada XAML e cria um grafo de objeto, usando o leitor XAML do WPF padrão e um gravador de objeto XAML associado.Reads XAML input and creates an object graph, using the WPF default XAML reader and an associated XAML object writer.

public ref class XamlReader
public class XamlReader
type XamlReader = class
Public Class XamlReader
Herança
XamlReader

Exemplos

O exemplo a seguir converte um Button em uma cadeia de caracteres usando a XamlWriter classe.The following example converts a Button into a string using the XamlWriter class. Em seguida, a cadeia de caracteres é carregada de volta para um Button usando o Load método estático na XamlReader classe.The string is then loaded back into a Button using the static Load method on the XamlReader class.

// 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)

Comentários

Os métodos síncronos Load são estáticos, mas os métodos assíncronos LoadAsync não são estáticos e exigem uma instância da XamlReader classe a ser usada.The synchronous Load methods are static, but the asynchronous LoadAsync methods are not static and require an instance of the XamlReader class to use.

A saída dos Load métodos é um único objeto, que representa o objeto raiz de uma árvore de objetos criada ou de um gráfico de objetos.The output of the Load methods is a single object, which represents the root object of a created object tree or object graph. Os grafos de objeto criados pelo XamlReader são normalmente adicionados à árvore de objetos existente de um aplicativo do WPF em tempo de execução.Object graphs that are created by XamlReader are typically added to the existing object tree of a WPF application at run time. Caso contrário, o novo grafo de objeto será considerado desconectado para fins do modelo de aplicativo do WPF.Otherwise the new object graph is considered disconnected for purposes of the WPF application model. Isso significa que ele não é renderizado e não pode ser acessado usando qualquer uma das técnicas da árvore de objetos, conforme aplicado à árvore de objetos principal do aplicativo WPF (por exemplo, APIs FindName , LogicalTreeHelper , VisualTreeHelper ).This means that it does not render, and cannot be accessed using any of the object tree techniques as applied to the WPF application's main object tree (for example, the APIs FindName, LogicalTreeHelper, VisualTreeHelper). Para obter mais informações sobre conceitos da árvore de objetos, consulte árvores no WPF.For more information on object tree concepts, see Trees in WPF.

XamlReader o dá suporte aos seguintes cenários principais:XamlReader supports the following primary scenarios:

  • Clonagem/fábrica de objetos: sem mecanismos adicionais, um tipo de referência geralmente não pode ser incluído em mais de uma posição em uma árvore de objetos do WPF.Cloning/object factory: Without additional mechanisms, a reference type generally cannot be included in more than one position in a WPF object tree. (Exemplos de mecanismos adicionais que oferecem suporte para compartilhamento ou reutilização no WPF incluem objetos baseados em Freezable , ou suporte para objetos comumente compartilháveis, como os Brush que são referenciados como um item de um ResourceDictionary .) Uma maneira de clonar um objeto que já está na árvore de objetos é serializar o objeto usando XamlWriter.Save .(Examples of additional mechanisms that offer support for sharing or re-use in WPF include objects that are based on Freezable, or support for commonly shareable objects such as Brush that are referenced as an item from a ResourceDictionary.) One way to clone an object that is already in the object tree is to serialize the object using XamlWriter.Save. Em seguida, você usa a cadeia de caracteres serializada como entrada para uma chamada para Load , com um fluxo ou XmlReader como um intermediário.You then use the serialized string as input for a call to Load, with a stream or XmlReader as an intermediary.

  • Construindo objetos com base em informações just-in-time: muitas vezes, há outras maneiras de fazer a ligação tardia ou a entrada fornecida pelo usuário alterar o estado dos objetos existentes.Constructing objects based on just-in-time information: There are often other ways to have late-binding or user-supplied input change the state of existing objects. Por exemplo, você pode usar o mesmo valor para definir mais de uma propriedade ou usar a vinculação de dados.For example you could use the same value to set more than one property, or use data binding. Mas se você tiver um cenário em que até mesmo o tipo de objeto a ser criado só será determinável no tempo de execução ou com a interação do usuário, a criação de tal objeto, criando uma cadeia de caracteres para Load entrada, geralmente é uma técnica útil.But if you have a scenario where even the type of object to create is only determinable at run time or with user interaction, then creating such an object by building up a string for Load input is often a useful technique.

  • Usando técnicas de recursos existentes: o Stream tipo é usado frequentemente em outras estruturas ou tecnologias para transferir dados ou objetos entre limites de aplicativos ou para situações semelhantes.Using existing resource techniques: The Stream type is used frequently in other frameworks or technologies for transferring data or objects across application boundaries or for similar situations. Você pode usar as Stream técnicas para armazenar ou obter dados formatados em XAML que você eventualmente usa para criar um objeto como parte de seu aplicativo.You can then use the Stream techniques to store or obtain XAML-formatted data that you eventually use to create an object as part of your application.

  • Documentos fixos: Seu aplicativo pode carregar documentos XPS locais ou baixados para inclusão em uma árvore de objetos de aplicativo do WPF e interface do usuário.Fixed documents: Your application might load local or downloaded XPS documents for inclusion in a WPF application object tree and UI.

Observação

Essa documentação, às vezes, descreve um gráfico de objeto, em oposição a uma árvore de objetos.This documentation sometimes describes an object graph, as opposed to an object tree. Uma relação pai-filho estrita nem sempre existe nas relações de objeto de tempo de execução de um aplicativo do WPF de tempo de execução, portanto, um grafo de objeto é uma terminologia mais amplamente aplicável.A strict parent-child relationship does not always exist in the run time object relationships of a run time WPF application, so an object graph is a more widely applicable terminology. No entanto, como o WPF também inclui duas APIs de conceituação de árvore diferentes ( LogicalTreeHelper , VisualTreeHelper ) a metáfora de árvore ainda se aplica adequadamente à maioria dos casos do mundo real no WPF.However, because WPF also includes two different tree conceptualization APIs (LogicalTreeHelper, VisualTreeHelper) the tree metaphor still applies adequately to most real-world cases in WPF. Na perspectiva da linguagem XAML, no entanto, o grafo do objeto geralmente é a melhor maneira de pensar sobre como os objetos são criados fora do XAML, pois a linguagem XAML não necessariamente especifica metodologias de classe auxiliar que trazem mais informações para uma estrutura de árvore novamente.From the XAML language perspective however, the object graph is often the best way to think about how objects are created out of XAML, because the XAML language itself does not necessarily specify helper class methodologies that bring the relationships more into a tree structure again.

Segurança de acesso ao código, XAML flexível e XamlReaderCode Access Security, Loose XAML, and XamlReader

XAML é uma linguagem de marcação que representa diretamente a instanciação e execução de objetos.XAML is a markup language that directly represents object instantiation and execution. Portanto, elementos criados em XAML têm a mesma capacidade que o código gerado equivalente no que se refere a interagir com recursos de sistema (acesso a rede e E/S do sistema de arquivos, por exemplo).Therefore, elements created in XAML have the same ability to interact with system resources (network access, file system IO, for example) as the equivalent generated code does.

WPFWPF dá suporte à .NET.NET estrutura de segurança CAS (segurança de acesso ao código)Code Access Security (CAS) .supports the .NET.NET security framework CAS (segurança de acesso ao código)Code Access Security (CAS). Isso significa que conteúdo do WPFWPF em execução na zona da Internet tem permissões de execução reduzidas.This means that WPFWPF content running in the internet zone has reduced execution permissions. "XAML avulso" (páginas de XAML não compilado interpretado na hora do carregamento por um visualizador XAML) e XBAP (aplicativo de navegação XAML)XAML browser application (XBAP) geralmente são executados nesta zona da Internet e usam o mesmo conjunto de permissões."Loose XAML" (pages of noncompiled XAML interpreted at load time by a XAML viewer) and XBAP (aplicativo de navegação XAML)XAML browser application (XBAP) are usually run in this internet zone and use the same permission set. No entanto, o XAML carregado em um aplicativo totalmente confiável tem o mesmo acesso aos recursos de sistema que o aplicativo host.However, XAML loaded in to a fully trusted application has the same access to the system resources as the hosting application does. Para obter mais informações, consulte Segurança parcialmente confiável do WPF.For more information, see WPF Partial Trust Security.

As implicações dessas instruções para o XamlReader são que o design do aplicativo deve tomar decisões de confiança sobre o XAML que você decide carregar.The implications of these statements for XamlReader is that your application design must make trust decisions about the XAML you decide to load. Se você estiver carregando XAML que não é confiável, considere implementar sua própria técnica de área restrita para saber como carregar o grafo de objeto resultante.If you are loading XAML that is not trusted, consider implementing your own sandboxing technique for how you load the resulting object graph.

XamlReader também pode ser chamado pelo código de confiança parcial.XamlReader can also be called by partial trust code. Nesse caso, a zona de segurança da Internet é aplicada à segurança de acesso do código.In this case, Internet security zone is applied for code access security. Se qualquer coisa no XAML carregado for inválida na zona de segurança da Internet, uma exceção de análise XAML será lançada.If anything in the loaded XAML is invalid under Internet security zone, a XAML parse exception is thrown. Em XBAP e em outros casos que são confiança parcial no nível da plataforma, em que XamlReader faz parte da execução, você obtém o mesmo comportamento de exceção que com chamadas de confiança parcial explícitas.Under XBAP and other cases that are partial trust at the platform level, where XamlReader is part of the execution, you get the same exception behavior as with explicit partial trust calls.

WPF XAML, leitores/gravadores XAML e controle de versão de linguagem XAMLWPF XAML, XAML Readers/Writers, and XAML Language Versioning

O XAML2009 inclui recursos de linguagem como x:Reference e x:FactoryMethod.XAML2009 includes language features such as x:Reference and x:FactoryMethod. Você pode usar assinaturas do Load ou Parse para carregar XAML que usa esses recursos.You can use signatures of Load or Parse to load XAML that uses these features. No entanto, esses recursos de idioma não têm suporte para XAML que precisam ser compilados em marcação (como XAML para a ação de compilação de página em um aplicativo WPF ou qualquer XAML que envolva a tarefa de compilação de marcação nas ações de compilação).However, those language features are not supported for XAML that needs to be markup compiled (such as XAML for the Page build action in a WPF application, or any XAML that involves the markup compile task in the build actions).

Os tipos do WPF e a tecnologia do WPF em conceitos de suporte geral que dependem do acesso a elementos internos do WPF.WPF types and the WPF technology in general support concepts that rely on access to WPF internals. Por exemplo, como o WPF implementa propriedades de dependência depende de técnicas internas para uma pesquisa de membros de tipo eficiente.For instance, how WPF implements dependency properties relies on internal techniques for efficient type-member lookup. O acesso a esses elementos internos é habilitado pelas APIs de leitura e gravação de XAML fornecidas no XamlWriter e XamlReader no System.Windows.Markup assembly namespace e PresentationFramework.Access to these internals is enabled by the XAML reading and writing APIs provided in XamlWriter and XamlReader from the System.Windows.Markup namespace and PresentationFramework assembly. No entanto, os leitores XAML de nível inferior e os gravadores XAML do assembly System. XAML (classes baseadas em System.Xaml.XamlReader , System.Xaml.XamlWriter ) não têm acesso aos elementos internos do WPF.However, the lower-level XAML readers and XAML writers from the System.Xaml assembly (classes based on System.Xaml.XamlReader, System.Xaml.XamlWriter) do not have access to the WPF internals. Não há dependência de System. XAML para qualquer assembly específico do WPF.There is no dependency from System.Xaml to any WPF-specific assembly. Sem acesso aos elementos internos do WPF, os leitores do System. XAML e os gravadores não podem carregar ou salvar corretamente todos os tipos do WPF, ou tipos baseados em tipos do WPF.Without access to the WPF internals, System.Xaml readers and writers cannot correctly load or save all WPF types, or types based on WPF types. Em particular, os leitores e gravadores System. XAML não entendem conceitos como o armazenamento de propriedade de apoio de propriedade de dependência do WPF ou todas as especificações de como o WPF usa estilos, dicionários de recursos e modelos.In particular, the System.Xaml readers and writers do not understand concepts such as the WPF dependency property backing property store, or all the specifics of how WPF uses styles, resource dictionaries and templates. Portanto, você tem a opção de fazer:Therefore you have a choice to make:

  • Se você estiver carregando tipos do WPF e/ou estiver usando XAML no formato BAML de qualquer forma, use os leitores XAML do PresentationFramework e os gravadores XAML.If you are loading WPF types, and/or you are using XAML in BAML form in any way, use the PresentationFramework XAML readers and XAML writers.

  • Se você não depender de nenhum tipo WPF ou da forma de BAML do XAML e não estiver usando outra implementação de leitor XAML ou gravador XAML da tecnologia específica por motivos específicos para essa estrutura, use os leitores XAML System. XAML e os gravadores XAML.If you are not relying on any WPF types or the BAML form of XAML, and are not using another specific technology's XAML reader or XAML writer implementation for reasons that are specific to that framework, use the System.Xaml XAML readers and XAML writers.

Implementação de backup do System. XAML no .NET 4System.Xaml Backing Implementation in .NET 4

XamlReader é a superfície de API resgatável para o analisador XAML no nível de estrutura do WPF.XamlReader is the callable API surface for the WPF framework-level XAML parser. O mesmo analisador XAML subjacente também executa o carregamento e a análise XAML em tempo de execução para aplicativos WPF direcionados .NET Framework 3.0.NET Framework 3.0 e .NET Framework 3.5.NET Framework 3.5 .The same underlying XAML parser also performs the run-time XAML loading and parsing for WPF applications that target .NET Framework 3.0.NET Framework 3.0 and .NET Framework 3.5.NET Framework 3.5.

Se você estiver visando .NET Framework 4.NET Framework 4 , a API externa será a mesma, mas as partes da implementação serão criadas na .NET Framework 4.NET Framework 4 implementação geral do XAML no assembly System. XAML, o que melhora muitos dos aspectos técnicos e de relatório da análise do XAML.If you are targeting .NET Framework 4.NET Framework 4, the external API is the same, but parts of the implementation are built on the .NET Framework 4.NET Framework 4 general XAML implementation in the System.Xaml assembly, which improves many of the technical and reporting aspects of parsing XAML. O direcionamento .NET Framework 4.NET Framework 4 necessariamente envolve a inclusão de System. XAML como uma referência, e os detalhes da implementação, como as exceções relatadas, podem vir de tipos definidos pelo System. XAML.Targeting .NET Framework 4.NET Framework 4 necessarily entails including System.Xaml as a reference, and details of implementation such as the exceptions reported may come from System.Xaml defined types.

Construtores

XamlReader()

Inicializa uma nova instância da classe XamlReader.Initializes a new instance of the XamlReader class.

Métodos

CancelAsync()

Anulará a operação de carregamento assíncrona atual, se houver uma operação de carregamento assíncrona pendente.Aborts the current asynchronous load operation, if there is an asynchronous load operation pending.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.Determines whether the specified object is equal to the current object.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.Serves as the default hash function.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.Gets the Type of the current instance.

(Herdado de Object)
GetWpfSchemaContext()

Retorna um objeto XamlSchemaContext que representa as configurações de contexto de esquema do WPF para um XamlReader.Returns a XamlSchemaContext object that represents the WPF schema context settings for a XamlReader.

Load(Stream)

Lê a entrada XAML no Stream especificado e retorna um Object que é a raiz da árvore de objetos correspondente.Reads the XAML input in the specified Stream and returns an Object that is the root of the corresponding object tree.

Load(Stream, Boolean)
Load(Stream, ParserContext)

Lê a entrada do XAML no Stream especificado e retorna um objeto que é a raiz da árvore de objetos correspondente.Reads the XAML input in the specified Stream and returns an object that is the root of the corresponding object tree.

Load(Stream, ParserContext, Boolean)
Load(XamlReader)

Lê a entrada de XAML através de um XamlReader fornecido e retorna um objeto que é a raiz da árvore de objetos correspondente.Reads the XAML input through a provided XamlReader and returns an object that is the root of the corresponding object tree.

Load(XmlReader)

Lê a entrada do XAML no XmlReader especificado e retorna um objeto que é a raiz da árvore de objetos correspondente.Reads the XAML input in the specified XmlReader and returns an object that is the root of the corresponding object tree.

Load(XmlReader, Boolean)
LoadAsync(Stream)

Lê a entrada XAML no Stream especificado e retorna a raiz da árvore de objetos correspondente.Reads the XAML input in the specified Stream and returns the root of the corresponding object tree.

LoadAsync(Stream, Boolean)
LoadAsync(Stream, ParserContext)

Lê a entrada XAML no Stream especificado e retorna a raiz da árvore de objetos correspondente.Reads the XAML input in the specified Stream and returns the root of the corresponding object tree.

LoadAsync(Stream, ParserContext, Boolean)
LoadAsync(XmlReader)

Lê a entrada XAML no XmlReader especificado e retorna a raiz da árvore de objetos correspondente.Reads the XAML input in the specified XmlReader and returns the root of the corresponding object tree.

LoadAsync(XmlReader, Boolean)
MemberwiseClone()

Cria uma cópia superficial do Object atual.Creates a shallow copy of the current Object.

(Herdado de Object)
Parse(String)

Lê a entrada XAML na cadeia de texto especificada e retorna um objeto que corresponde à raiz da marcação especificada.Reads the XAML input in the specified text string and returns an object that corresponds to the root of the specified markup.

Parse(String, Boolean)
Parse(String, ParserContext)

Lê a marcação XAML na cadeia de texto especificada (usando um ParserContext especificado) e retorna um objeto que corresponde à raiz da marcação especificada.Reads the XAML markup in the specified text string (using a specified ParserContext) and returns an object that corresponds to the root of the specified markup.

Parse(String, ParserContext, Boolean)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.Returns a string that represents the current object.

(Herdado de Object)

Eventos

LoadCompleted

Ocorre quando uma operação de carregamento assíncrona é concluída.Occurs when an asynchronous load operation completes.

Aplica-se a

Confira também