XamlReader Classe

Definição

Lê a entrada XAML e cria um grafo de objeto, usando o leitor XAML padrão do WPF 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 em Button uma cadeia de caracteres usando a XamlWriter classe. Em seguida, a cadeia de caracteres é carregada novamente em um Button 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 eles 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 é 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 objetos, conforme aplicado à árvore de objetos principal 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 primários:

  • 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 Freezableem , 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, use a cadeia de caracteres serializada como entrada para uma chamada para Load, com um fluxo ou XmlReader como um intermediário.

  • Construir objetos com base em informações just-in-time: muitas vezes, há outras maneiras de fazer com que a associação tardia ou a entrada fornecida pelo usuário alterem 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. No entanto, se você tiver um cenário em que até mesmo o tipo de objeto a ser criado só seja 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 será 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 os 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 corrigidos: 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.

Note

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 APIsLogicalTreeHelper de conceituação de árvore (, VisualTreeHelper) a metáfora da árvore ainda se aplica adequadamente à maioria dos casos do mundo real no WPF. Do ponto de vista 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 linguagem XAML em si não especifica necessariamente metodologias de classe auxiliar que trazem as relações mais para uma estrutura de árvore novamente.

Segurança de Acesso ao 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, os elementos criados em XAML têm a mesma capacidade de interagir com recursos do sistema (acesso à rede, E/S do sistema de arquivos, por exemplo) como o código gerado equivalente.

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 do sistema que o aplicativo de hospedagem. Para obter mais informações, consulte segurança de confiança parcial do WPF.

As implicações dessas instruções são 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 em outros casos que são de confiança parcial no nível da plataforma, onde XamlReader 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/escritores XAML e controle de versão da linguagem XAML

XAML2009 inclui recursos de linguagem como x:Reference e x:FactoryMethod. Você pode usar assinaturas ou LoadParse carregar XAML que usa esses recursos. No entanto, não há suporte para esses recursos de linguagem para XAML que precisam ser compilados 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 as propriedades de dependência depende de técnicas internas para uma pesquisa eficiente de membro do 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 ou salvar corretamente todos os tipos do WPF ou tipos com base em tipos WPF. Em particular, os leitores e gravadores system.Xaml não entendem conceitos como o repositório de propriedades de backup de 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 a opção de fazer:

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

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

Implementação de backup 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 de XAML em tempo de execução para aplicativos WPF destinados ao .NET Framework 3.0 e ao .NET Framework 3.5.

Se você estiver direcionando o .NET Framework 4, a API externa será a mesma, mas partes da implementação serão criadas na implementação geral de XAML do .NET Framework 4 no assembly System.Xaml, o que melhora muitos dos aspectos técnicos e de relatório da análise do XAML. O direcionamento do .NET Framework 4 necessariamente envolve 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

Nome Description
XamlReader()

Inicializa uma nova instância da classe XamlReader.

Métodos

Nome Description
CancelAsync()

Anula a operação de carga assíncrona atual, se houver uma operação de carga 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 XamlSchemaContext objeto que representa as configurações de contexto de esquema do WPF para um XamlReader.

Load(Stream, Boolean)

Lê a entrada XAML e cria um grafo de objeto, usando o leitor XAML padrão do WPF e um gravador de objeto XAML associado.

Load(Stream, ParserContext, Boolean)

Lê a entrada XAML e cria um grafo de objeto, usando o leitor XAML padrão do WPF e um gravador de objeto XAML associado.

Load(Stream, ParserContext)

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

Load(Stream)

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

Load(XamlReader)

Lê a entrada XAML por meio de um fornecido XamlReader 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 padrão do WPF e um gravador de objeto XAML associado.

Load(XmlReader)

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

LoadAsync(Stream, Boolean)

Lê a entrada XAML e cria um grafo de objeto, usando o leitor XAML padrão do WPF e um gravador de objeto XAML associado.

LoadAsync(Stream, ParserContext, Boolean)

Lê a entrada XAML e cria um grafo de objeto, usando o leitor XAML padrão do WPF e um gravador de objeto XAML associado.

LoadAsync(Stream, ParserContext)

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

LoadAsync(Stream)

Lê a entrada XAML na especificada Stream 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 padrão do WPF e um gravador de objeto XAML associado.

LoadAsync(XmlReader)

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

MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
Parse(String, Boolean)

Lê a entrada XAML e cria um grafo de objeto, usando o leitor XAML padrão do WPF e um gravador de objeto XAML associado.

Parse(String, ParserContext, Boolean)

Lê a entrada XAML e cria um grafo de objeto, usando o leitor XAML padrão do WPF e um gravador de objeto XAML associado.

Parse(String, ParserContext)

Lê a marcação XAML na cadeia de caracteres de texto especificada (usando um especificado ParserContext) e retorna um objeto que corresponde à raiz da marcação especificada.

Parse(String)

Lê a entrada XAML na cadeia de caracteres de texto especificada e retorna um objeto que corresponde à raiz da marcação especificada.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Eventos

Nome Description
LoadCompleted

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

Aplica-se a

Confira também