Compartilhar via


Serviços XAML

Este tópico descreve os recursos de um conjunto de tecnologias conhecido como Serviços XAML do .NET. A maioria dos serviços e APIs descritos estão localizados no assembly System.Xaml. Os serviços incluem leitores e escritores, classes de esquema e suporte a esquema, fábricas, 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 do .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 Windows Presentation Foundation (WPF) ou o Windows Workflow Foundation, ou uma área de recurso de tecnologia específica, por exemplo, os recursos de personalização de build em 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, essa documentação se concentra especificamente no uso dos Serviços XAML do .NET habilitados na biblioteca de assembly System.Xaml. A maioria dessas APIs destina-se a cenários de integração e extensibilidade de linguagem XAML. Isso pode incluir qualquer um dos seguintes cenários:

  • Estendendo os 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).

  • Definindo tipos personalizados utilizáveis em XAML que não têm dependências de estrutura específicas e atribuindo os tipos para transmitir suas características do sistema de tipo XAML aos Serviços XAML do .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.

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

  • Definindo um contexto de esquema XAML personalizado (usando técnicas alternativas de carregamento de assembly para fontes de tipo de backup; 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).

  • Estendendo o sistema de tipo XAML base.

  • Usar as técnicas de Lookup ou Invoker para influenciar o sistema de tipos XAML e como os backups de tipo são avaliados.

Se você estiver procurando material introdutório no XAML como um idioma, poderá tentar WPF .NET (visão geral de XAML). 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 do .NET e System.Xaml na arquitetura do .NET

Os Serviços XAML do .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 do .NET que não estavam presentes em nenhuma das implementações de XAML específicas da estrutura é uma representação do sistema de tipos 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 tipo 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 backup 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 consome ou emite XAML. O conceito de um contexto de esquema XAML permite operações práticas de gravação de grafo de objeto a partir 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. consulte contexto de esquema XAML padrão e contexto de esquema XAML do WPF.

Fluxos de nó XAML, leitores XAML e gravadores XAML

Para entender a função que os Serviços XAML do .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 carregar XAML para criar uma instância de um grafo de objeto e salvar um grafo de objeto de um aplicativo ou ferramenta e produzir uma representação XAML (normalmente no formulário de marcação salvo como arquivo de texto). Carregar XAML e criar um grafo de objeto é frequentemente referido nesta documentação como o caminho de carga. Salvar ou serializar um grafo de objeto existente em XAML geralmente é referido 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. XamlXmlReader é uma subclasse XamlReader.

  • O resultado é um fluxo de nó XAML. Você pode acessar nós individuais do fluxo de nós XAML usando XamlXmlReader / XamlReader API. 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 de XamlObjectWriter. XamlObjectWriter é uma subclasse XamlWriter.

  • O XamlObjectWriter grava um grafo de objeto, um objeto por vez, de acordo com o progresso por meio do fluxo de nós 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 tipo de backup e uma estrutura.

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

    O tipo mais comum de caminho de salvamento 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. XamlObjectReader é uma subclasse XamlReader.

  • O resultado é um fluxo de nó XAML. Você pode acessar nós individuais do fluxo de nós XAML usando XamlObjectReader e XamlReader API. 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 de XamlXmlWriter. XamlXmlWriter é uma subclasse XamlWriter.

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

  • Chame Flush para obter a saída final.

Para obter mais informações sobre conceitos de fluxo de nós XAML, consulte 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 implementar um caminho de carga. Você pode carregar um arquivo ou fluxo ou carregar um XmlReader, TextReader ou XamlReader que encapsulam sua entrada XAML carregando com as APIs desse leitor.

  • Várias assinaturas de Save salvar um grafo de objeto e produzir saída como uma instância de fluxo, arquivo ou 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 a forma como o XAML resultante é transformado.

Para obter mais informações sobre como usar XamlServices, consulte classe XAMLServices ede leitura ou gravação de XAML básico.

Sistema de tipo XAML

O sistema de tipo XAML fornece as APIs necessárias para trabalhar com um nó individual específico 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 relatam as relações entre um XamlType e XamlMember.

O comportamento padrão do sistema de tipos XAML, conforme implementado pelos Serviços XAML do .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 de linguagem XAML

Para dar suporte a XAML, os Serviços XAML do .NET fornecem uma implementação específica de conceitos de linguagem XAML, conforme definido para o namespace XAML da linguagem XAML. Elas são documentadas 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 gravador XAML definido pelos Serviços XAML do .NET. Para obter mais informações, consulte recursos de linguagem XAML (x:).