Compartilhar via


Serviços XAML

Este tópico descreve os recursos de um conjunto de tecnologias conhecido como Serviços XAML .NET. A maioria dos serviços e APIs descritos está localizada no assembly System.Xaml. Os serviços incluem leitores e escritores, classes de esquema e suporte a esquema, alocadores, atribuição de classes, suporte intrínseco à linguagem XAML e outros recursos de linguagem XAML.

Sobre esta documentação

A documentação conceitual dos Serviços XAML .NET pressupõe que você tenha experiência anterior com a linguagem XAML e como ela pode se aplicar a uma estrutura específica, por exemplo, o WPF (Windows Presentation Foundation) ou o Windows Workflow Foundation ou uma área de recurso de tecnologia específica, por exemplo, os recursos de personalização de build no Microsoft.Build.Framework.XamlTypes. Esta documentação não tenta explicar os conceitos básicos do XAML como uma linguagem de marcação, terminologia de sintaxe XAML ou outro material introdutório. Em vez disso, esta documentação se concentra especificamente no uso dos Serviços XAML .NET habilitados na biblioteca de assemblies System.Xaml. A maioria dessas APIs destina-se a cenários de integração e extensibilidade da linguagem XAML. Isso pode incluir qualquer um dos seguintes cenários:

  • Extensão dos recursos dos leitores XAML base ou gravadores XAML (processando diretamente o fluxo de nós XAML; derivando seu próprio leitor XAML ou gravador XAML).

  • Definição de tipos personalizados utilizáveis em XAML que não têm dependências de estrutura específicas e atribuição dos tipos para transmitir suas características do sistema de tipo XAML aos Serviços XAML .NET.

  • Hospedar leitores XAML ou gravadores XAML como um componente de um aplicativo, como um designer visual ou editor interativo para fontes de marcação XAML.

  • Gravação de conversores de valor XAML (extensões de marcação; conversores de tipo para tipos personalizados).

  • Definição de um contexto de esquema XAML personalizado (usando técnicas alternativas de carregamento de assembly para fontes de tipo de suporte; usando técnicas de pesquisa de tipos conhecidos em vez de sempre refletir assemblies; usando conceitos de assembly carregados que não usam o CLR (Common Language Runtime) AppDomain e seu modelo de segurança associado).

  • Como estender o sistema de tipo XAML base.

  • Uso das técnicas Lookup ou Invoker para influenciar o sistema de tipos XAML e como o suporte a tipos é avaliado.

Se você estiver procurando material introdutório no XAML como uma linguagem, poderá experimentar Visão geral do XAML (WPF .NET). Esse tópico discute o XAML para um público que é novo no WPF (Windows Presentation Foundation) e também para usar a marcação XAML e os recursos de linguagem XAML. Outro documento útil é o material introdutório na especificação da linguagem XAML.

Serviços XAML .NET e System.Xaml na arquitetura do .NET

Os Serviços XAML .NET e o assembly System.Xaml definem muito do que é necessário para dar suporte aos recursos de linguagem XAML. Isso inclui classes base para leitores XAML e gravadores XAML. O recurso mais importante adicionado aos Serviços XAML .NET que não estavam presentes em nenhuma das implementações de XAML específicas da estrutura é uma representação de sistema de tipo para XAML. A representação do sistema de tipos apresenta XAML de uma maneira orientada a objeto que centra-se em recursos XAML sem depender de recursos específicos de estruturas.

O sistema de tipos XAML não é limitado pelo formulário de marcação ou especificações de tempo de execução da origem XAML; nem é limitado por qualquer sistema de tipo de suporte específico. O sistema de tipos XAML inclui representações de objeto para tipos, membros, contextos de esquema XAML, conceitos de nível XML e outros conceitos de linguagem XAML ou intrínsecos XAML. Usar ou estender o sistema de tipos XAML possibilita derivar de classes como leitores XAML e gravadores XAML e estender a funcionalidade de representações XAML em recursos específicos habilitados por uma estrutura, uma tecnologia ou um aplicativo que consuma ou emita XAML. O conceito de um contexto de esquema XAML permite operações práticas de gravação de grafo de objeto da combinação de uma implementação do gravador de objetos XAML, do sistema de tipos de backup de uma tecnologia conforme comunicado por meio de informações de assembly no contexto e da origem do nó XAML. Para obter mais informações sobre o conceito de esquema XAML, confira Contexto do esquema XML padrão e contexto do esquema XAML WPF.

Fluxos de nó XAML, leitores XAML e gravadores XAML

Para entender a função que os Serviços XAML .NET desempenham na relação entre a linguagem XAML e tecnologias específicas que usam XAML como linguagem, é útil entender o conceito de um fluxo de nós XAML e como esse conceito molda a API e a terminologia. O fluxo de nó XAML é um intermediário conceitual entre uma representação de linguagem XAML e o grafo de objeto que o XAML representa ou define.

  • Um leitor XAML é uma entidade que processa XAML de alguma forma e produz um fluxo de nós XAML. Na API, um leitor XAML é representado pela classe base XamlReader.

  • Um gravador XAML é uma entidade que processa um fluxo de nós XAML e produz outra coisa. Na API, um gravador XAML é representado pela classe base XamlWriter.

    Os dois cenários mais comuns envolvendo XAML são o carregamento de XAML para criar uma instância de um grafo de objeto e o salvamento de um grafo de objeto de um aplicativo ou ferramenta e produzir uma representação XAML (normalmente no formato de marcação salvo como arquivo de texto). Carregar XAML e criar um grafo de objeto é frequentemente mencionado nesta documentação como o caminho de carga. Salvar ou serializar um grafo de objeto existente em XAML geralmente é mencionado nesta documentação como o caminho de salvamento.

    O tipo mais comum de caminho de carga pode ser descrito da seguinte maneira:

  • Comece com uma representação XAML, no formato XML codificado em UTF e salvo como um arquivo de texto.

  • Carregue esse XAML em XamlXmlReader. O XamlXmlReader é uma subclasse de XamlReader.

  • O resultado é um fluxo de nós XAML. Você pode acessar nós individuais do fluxo de nós XAML usando a API XamlXmlReader / XamlReader. A operação mais típica aqui é avançar pelo fluxo de nós XAML, processando cada nó usando uma metáfora de “registro atual”.

  • Passe os nós resultantes do fluxo de nós XAML para uma API XamlObjectWriter. O XamlObjectWriter é uma subclasse de XamlWriter.

  • XamlObjectWriter grava um grafo de objeto, um objeto por vez, de acordo com o progresso por meio do fluxo de nó XAML de origem. A gravação de objetos é feita com a ajuda de um contexto de esquema XAML e uma implementação que pode acessar os assemblies e tipos de um sistema de tipos de suporte e uma estrutura.

  • Chame Result no final do fluxo de nó XAML para obter o objeto raiz do grafo de objeto.

    O tipo mais comum de salvar caminho pode ser descrito da seguinte maneira:

  • Comece com o grafo de objeto de todo o tempo de execução do aplicativo, o conteúdo da interface do usuário e o estado de um tempo de execução ou um segmento menor da representação de objeto de um aplicativo geral em tempo de execução.

  • De um objeto de início lógico, como uma raiz de aplicativo ou raiz de documento, carregue os objetos em XamlObjectReader. O XamlObjectReader é uma subclasse de XamlReader.

  • O resultado é um fluxo de nós XAML. Você pode acessar nós individuais do fluxo de nós XAML usando XamlObjectReader e a API XamlReader. A operação mais típica aqui é avançar pelo fluxo de nós XAML, processando cada nó usando uma metáfora de “registro atual”.

  • Passe os nós resultantes do fluxo de nós XAML para uma API XamlXmlWriter. O XamlXmlWriter é uma subclasse de XamlWriter.

  • XamlXmlWriter grava XAML em uma codificação UTF XML. Você pode salvá-lo como um arquivo de texto, como um fluxo ou em outros formatos.

  • Chame Flush para obter a saída final.

Para obter mais informações sobre conceitos de fluxo de nós XAML, confira Noções básicas sobre estruturas e conceitos de fluxo de nós XAML.

A classe XamlServices

Nem sempre é necessário lidar com um fluxo de nós XAML. Se você quiser um caminho de carga básico ou um caminho de salvamento básico, poderá usar APIs na classe XamlServices.

  • Várias assinaturas de Load implementam um caminho de carga. Você pode carregar um arquivo ou fluxo ou carregar um XmlReader, TextReader ou XamlReader que encapsulam sua entrada XAML ao serem carregados com as APIs desse leitor.

  • Várias assinaturas de Save salvam um grafo de objeto e produzem saída como um fluxo, arquivo ou instância de XmlWriter/TextWriter.

  • Transform converte XAML vinculando um caminho de carga e um caminho de salvamento como uma única operação. Um contexto de esquema diferente ou um sistema de tipo de backup diferente pode ser usado para XamlReader e XamlWriter, que é o que influencia como o XAML resultante é transformado.

Para obter mais informações sobre como usar XamlServices, confira Classe XAMLServices e a leitura ou escrita XAML básicas.

Sistema de tipos XAML

O sistema de tipo XAML fornece as APIs que são necessárias para trabalhar com um determinado nó individual de um fluxo de nó XAML.

XamlType é a representação de um objeto – o que você está processando entre um nó de objeto inicial e um nó de objeto final.

XamlMember é a representação de um membro de um objeto – o que você está processando entre um nó de membro inicial e um nó de membro final.

APIs como GetAllMembers e GetMember e DeclaringType mostram os relacionamentos entre XamlType e XamlMember.

O comportamento padrão do sistema de tipos XAML, conforme implementado pelos Serviços XAML .NET, baseia-se no CLR (Common Language Runtime) e na análise estática de tipos CLR em assemblies usando reflexão. Portanto, para um tipo CLR específico, a implementação padrão do sistema de tipos XAML pode expor o esquema XAML desse tipo e seus membros e denunciá-lo em termos do sistema de tipos XAML. No sistema de tipo XAML padrão, o conceito de atribuição de tipos é mapeado para a herança CLR e os conceitos de instâncias, tipos de valor e assim por diante também são mapeados para os comportamentos e recursos de suporte do CLR.

Referência para recursos da linguagem XAML

Para dar suporte a XAML, os Serviços XAML .NET fornecem uma implementação específica de conceitos de linguagem XAML, conforme definido para o namespace XAML da linguagem XAML. Eles são documentados como páginas de referência específicas. Os recursos de linguagem são documentados da perspectiva de como esses recursos de linguagem se comportam quando são processados por um leitor XAML ou um gravador XAML definido pelos Serviços XAML .NET. Para obter mais informações, confira Recursos de linguagem do Namespace XAML (x:).