Partilhar via


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.

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 . Em seguida, a cadeia de caracteres é carregada novamente em um Button usando o método estático Load na XamlReader classe .

// 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 são estáticos Load , mas os métodos assíncronos não são estáticos LoadAsync e exigem uma instância da XamlReader classe a ser usada.

A saída dos Load métodos é um único objeto, que representa o objeto raiz de uma árvore de objeto ou grafo de objeto criado. Grafos de objeto criados por XamlReader normalmente são adicionados à árvore de objetos existente de um aplicativo WPF em tempo de execução. Caso contrário, o novo grafo de objeto será considerado desconectado para fins do modelo de aplicativo WPF. Isso significa que ele não é renderizado e não pode ser acessado usando nenhuma das técnicas de árvore de objeto, conforme aplicado à árvore de objetos main do aplicativo WPF (por exemplo, as APIs FindName, LogicalTreeHelper, VisualTreeHelper). Para obter mais informações sobre conceitos de árvore de objetos, consulte Árvores no WPF.

XamlReader dá suporte aos seguintes cenários principais:

  • 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. (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 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. 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.

  • Construção de objetos com base em informações just-in-time: muitas vezes, há outras maneiras de fazer com que a entrada fornecida pelo usuário ou de associação tardia altere o estado dos objetos existentes. Por exemplo, você pode usar o mesmo valor para definir mais de uma propriedade ou usar a associação de dados. Mas se você tiver um cenário em que até mesmo o tipo de objeto a ser criado só é determinável em tempo de execução ou com a interação do usuário, criar esse objeto criando uma cadeia de caracteres para Load entrada geralmente é uma técnica útil.

  • Usando técnicas de recursos existentes: o Stream tipo é usado com frequência em outras estruturas ou tecnologias para transferir dados ou objetos entre limites do aplicativo ou para situações semelhantes. Em seguida, 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 do aplicativo.

  • Documentos fixos: Seu aplicativo pode carregar documentos XPS locais ou baixados para inclusão em uma árvore de objetos do aplicativo WPF e na interface do usuário.

Observação

Esta documentação às vezes descreve um grafo de objeto, em vez de uma árvore de objetos. Uma relação pai-filho estrita nem sempre existe nas relações de objeto de tempo de execução de um aplicativo WPF em tempo de execução, portanto, um grafo de objeto é uma terminologia mais amplamente aplicável. 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. Na perspectiva da linguagem XAML, no entanto, o grafo de objeto geralmente é a melhor maneira de pensar sobre como os objetos são criados a partir de XAML, porque a própria linguagem XAML não especifica necessariamente metodologias de classe auxiliar que trazem as relações mais para uma estrutura de árvore novamente.

Segurança de acesso a código, XAML flexível e XamlReader

XAML é uma linguagem de marcação que representa diretamente a instanciação e execução de objetos. 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).

O WPF dá suporte ao CAS (Code Access Security) da estrutura de segurança do .NET. Isso significa que o conteúdo do WPF em execução na zona da Internet tem permissões de execução reduzidas. "XAML solto" (páginas de XAML não compilado interpretadas em tempo de carga por um visualizador XAML) e XBAP (aplicativo de navegador XAML) geralmente são executadas nessa zona da Internet e usam o mesmo conjunto de permissões. No entanto, o XAML carregado em um aplicativo totalmente confiável tem o mesmo acesso aos recursos de sistema que o aplicativo host. Para obter mais informações, consulte Segurança parcialmente confiável do WPF.

As implicações dessas instruções para XamlReader é que o design do aplicativo deve tomar decisões de confiança sobre o XAML que você decide carregar. Se você estiver carregando XAML que não é confiável, considere implementar sua própria técnica de área restrita para como você carrega o grafo de objeto resultante.

XamlReader também pode ser chamado pelo código de confiança parcial. Nesse caso, a zona de segurança da Internet é aplicada à segurança de acesso ao código. Se algo no XAML carregado for inválido na zona de segurança da Internet, uma exceção de análise XAML será gerada. Em XBAP e outros casos que são de confiança parcial no nível da plataforma, em XamlReader que faz parte da execução, você obtém o mesmo comportamento de exceção que com chamadas de confiança parcial explícitas.

XAML do WPF, leitores/gravadores XAML e controle de versão da linguagem XAML

XAML2009 inclui recursos de linguagem como x:Reference e x:FactoryMethod. Você pode usar assinaturas de Load ou Parse para carregar XAML que usa esses recursos. No entanto, esses recursos de linguagem não têm suporte para XAML que precisa ser compilado de marcação (como XAML para a ação de build de página em um aplicativo WPF ou qualquer XAML que envolva a tarefa de compilação de marcação nas ações de build).

Os tipos WPF e a tecnologia WPF em geral dão suporte a conceitos que dependem do acesso aos internos do WPF. Por exemplo, como o WPF implementa propriedades de dependência depende de técnicas internas para uma pesquisa eficiente de membro de tipo. O acesso a esses internos é habilitado pelas APIs de leitura e gravação XAML fornecidas no XamlWriterXamlReader namespace e no System.Windows.Markup assembly PresentationFramework. 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 internos do WPF. Não há nenhuma dependência do System.Xaml para qualquer assembly específico do WPF. Sem acesso aos internos do WPF, os leitores e gravadores do System.Xaml não podem carregar nem salvar corretamente todos os tipos do WPF ou tipos com base em tipos WPF. Em particular, os leitores e gravadores do System.Xaml não entendem conceitos como o repositório de propriedades de backup da propriedade de dependência do WPF ou todas as especificidades de como o WPF usa estilos, dicionários de recursos e modelos. Portanto, você tem uma escolha a fazer:

  • Se você estiver carregando tipos WPF e/ou estiver usando XAML no formato BAML de alguma forma, use os leitores XAML PresentationFramework e gravadores XAML.

  • Se você não estiver confiando em nenhum tipo WPF ou na forma BAML de XAML e não estiver usando outra implementação de leitor XAML ou gravador XAML de outra tecnologia específica por motivos específicos dessa estrutura, use os leitores XAML e gravadores XAML do System.Xaml.

Implementação de suporte do System.Xaml no .NET 4

XamlReader é a superfície de API que pode ser chamada para o analisador XAML no nível da estrutura do WPF. 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 e .NET Framework 3.5.

Se você estiver direcionando .NET Framework 4, a API externa será a mesma, mas partes da implementação serão criadas na implementação de XAML geral .NET Framework 4 no assembly System.Xaml, o que melhora muitos dos aspectos técnicos e de relatório da análise de XAML. O direcionamento .NET Framework 4 implica necessariamente a inclusão de System.Xaml como referência e os detalhes da implementação, como as exceções relatadas, podem vir de tipos definidos pelo System.Xaml.

Construtores

XamlReader()

Inicializa uma nova instância da classe XamlReader.

Métodos

CancelAsync()

Anulará a operação de carregamento assíncrona atual, se houver uma operação de carregamento assíncrona pendente.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
GetWpfSchemaContext()

Retorna um objeto XamlSchemaContext que representa as configurações de contexto de esquema do WPF para um XamlReader.

Load(Stream)

Lê a entrada XAML no Stream especificado e retorna um Object que é a raiz da árvore de objetos correspondente.

Load(Stream, Boolean)

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.

Load(Stream, ParserContext)

Lê a entrada do XAML no Stream especificado e retorna um objeto que é a raiz da árvore de objetos correspondente.

Load(Stream, ParserContext, Boolean)

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.

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.

Load(XmlReader)

Lê a entrada do XAML no XmlReader especificado e retorna um objeto que é a raiz da árvore de objetos correspondente.

Load(XmlReader, Boolean)

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.

LoadAsync(Stream)

Lê a entrada XAML no Stream especificado e retorna a raiz da árvore de objetos correspondente.

LoadAsync(Stream, Boolean)

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.

LoadAsync(Stream, ParserContext)

Lê a entrada XAML no Stream especificado e retorna a raiz da árvore de objetos correspondente.

LoadAsync(Stream, ParserContext, Boolean)

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.

LoadAsync(XmlReader)

Lê a entrada XAML no XmlReader especificado e retorna a raiz da árvore de objetos correspondente.

LoadAsync(XmlReader, Boolean)

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.

MemberwiseClone()

Cria uma cópia superficial do Object atual.

(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.

Parse(String, Boolean)

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.

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.

Parse(String, ParserContext, Boolean)

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.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Eventos

LoadCompleted

Ocorre quando uma operação de carregamento assíncrona é concluída.

Aplica-se a

Confira também