Classe XAMLServices e leitura ou gravação XAML básica

XamlServices é uma classe fornecida pelo .NET que pode ser usada para abordar cenários XAML que não exigem acesso específico ao fluxo de nós XAML ou às informações do sistema do tipo XAML obtidas desses nós. XamlServices A API pode ser resumida da seguinte forma: Load ou Parse para dar suporte a um caminho de carregamento XAML, Save para dar suporte a um caminho de salvamento XAML e para fornecer uma técnica que une um caminho de carregamento e Transform um caminho de salvamento. Transform pode ser usado para mudar de um esquema XAML para outro. Este tópico resume cada uma dessas classificações de API e descreve as diferenças entre sobrecargas de método específicas.

Carregar

Várias sobrecargas de implementar a lógica completa para um caminho de Load carga. O caminho de carregamento usa XAML de alguma forma e gera um fluxo de nó XAML. A maioria desses caminhos de carregamento usa XAML em um formato de arquivo de texto XML codificado. No entanto, você também pode carregar um fluxo geral ou pode carregar uma fonte XAML pré-carregada que já está contida em uma implementação diferente XamlReader .

A sobrecarga mais simples para a maioria dos cenários é Load(String). Essa sobrecarga tem um parâmetro que é simplesmente o nome de um fileName arquivo de texto que contém o XAML a ser carregado. Isso é apropriado para cenários de aplicativos, como aplicativos de confiança total que tenham estado ou dados serializados anteriormente para o computador local. Isso também é útil para estruturas em que você está definindo o modelo de aplicativo e deseja carregar um dos arquivos padrão que define o comportamento do aplicativo, a interface do usuário inicial ou outros recursos definidos pela estrutura que usam XAML.

Load(Stream) tem cenários semelhantes. Essa sobrecarga pode ser útil se o usuário escolher arquivos para carregar, porque a é uma Stream saída frequente de outras System.IO APIs que podem acessar um sistema de arquivos. Ou você pode estar acessando fontes XAML por meio de downloads assíncronos ou outras técnicas de rede que também fornecem um fluxo. (O carregamento a partir de um fluxo ou fonte selecionada pelo usuário pode ter implicações de segurança. Para obter mais informações, consulte Considerações de segurança XAML.)

Load(TextReader) e Load(XmlReader) são sobrecargas que dependem de leitores de formatos de versões anteriores do .NET. Para usar essas sobrecargas, você já deve ter criado uma instância de leitor e usado sua Create API para carregar o XAML no formato relevante (texto ou XML). Se você já moveu ponteiros de registro nos outros leitores ou executou outras operações com eles, isso não é importante. A lógica do caminho de carga de Load sempre processa toda a entrada XAML da raiz para baixo. Os seguintes cenários podem justificar o uso dessas sobrecargas:

  • Crie superfícies onde você fornece recursos de edição XAML simples de um editor de texto específico de XML existente.

  • Variantes dos cenários principais System.IO , onde você usa os leitores dedicados para abrir arquivos ou fluxos. Sua lógica executa verificação rudimentar ou processamento do conteúdo antes de tentar carregar como XAML.

Você pode carregar um arquivo ou fluxo, ou pode carregar um XmlReader, TextReaderou XamlReader que encapsula sua entrada XAML carregando com as APIs do leitor.

Internamente, cada uma das sobrecargas anteriores é, em última análise Load(XmlReader), , e o passado XmlReader é usado para criar um novo XamlXmlReader.

A Load assinatura que fornece cenários mais avançados é Load(XamlReader). Você pode usar essa assinatura para um dos seguintes casos:

  • Você definiu sua própria implementação de um XamlReaderarquivo .

  • Você precisa especificar configurações para XamlReader que variam das configurações padrão.

Exemplos de configurações não padrão:

AllowProtectedMembersOnRoot
BaseUri
IgnoreUidsOnPropertyElements
LocalAssembly
ValuesMustBeString.

O leitor padrão para XamlServices é XamlXmlReader. Se você fornecer suas próprias XamlXmlReader configurações, as propriedades a serem definidas a seguir não são padrão XamlXmlReaderSettings:

CloseInput
SkipXmlCompatibilityProcessing
XmlLang
XmlSpacePreserve

Analisar

Parse é como Load porque é uma API de caminho de carga que cria um fluxo de nó XAML a partir da entrada XAML. No entanto, nesse caso, a entrada XAML é fornecida diretamente como uma cadeia de caracteres que contém todos os XAML a serem carregados. Parse é uma abordagem leve que é mais apropriada para cenários de aplicativo do que cenários de estrutura. Para obter mais informações, consulte Parse. Parse é apenas uma chamada embrulhada Load(XmlReader) que envolve um StringReader internamente.

Salvar

Várias sobrecargas de implementar o caminho de Save salvamento. Todos os Save métodos tomam um gráfico de objeto como entrada e produzem saída como um fluxo, arquivo ou XmlWriter/TextWriter instância.

Espera-se que o objeto de entrada seja o objeto raiz de alguma representação de objeto. Essa pode ser a raiz única de um objeto de negócios, a raiz de uma árvore de objetos para uma página em um cenário de interface do usuário, a superfície de edição de trabalho de uma ferramenta de design ou outros conceitos de objeto raiz apropriados para cenários.

Em muitos cenários, a árvore de objetos salva está relacionada a uma operação original que carregou XAML com ou com Load outra API implementada por um modelo de estrutura/aplicativo. Pode haver diferenças capturadas na árvore de objetos que são devidas a alterações de estado, alterações em que seu aplicativo capturou configurações de tempo de execução de um usuário, alterou XAML porque seu aplicativo é uma superfície de design XAML, etc. Com ou sem alterações, o conceito de primeiro carregar XAML da marcação e, em seguida, salvá-lo novamente e comparar os dois formulários de marcação XAML às vezes é referido como uma representação de ida e volta do XAML.

O desafio de salvar e serializar um objeto complexo definido em um formulário de marcação está em alcançar um equilíbrio entre representação completa sem perda de informações versus detalhamento que torna o XAML menos legível por humanos. Além disso, clientes diferentes para XAML podem ter definições ou expectativas diferentes sobre como esse equilíbrio deve ser definido. As Save APIs representam uma definição desse equilíbrio. As Save APIs usam o contexto de esquema XAML disponível e as características padrão baseadas em CLR de , XamlMembere outros conceitos de sistema de tipo XAML e intrínsecos para determinar onde determinadas construções de fluxo de XamlTypenó XAML podem ser otimizadas quando são salvas novamente na marcação. Por exemplo, os caminhos de salvamento podem usar o contexto de esquema XAML padrão baseado em CLR para resolver XamlType objetos, XamlServices podem determinar um XamlType.ContentPropertye podem omitir marcas de elemento de propriedade quando gravam a propriedade no conteúdo XAML do objeto.

Transformação

Transform converte ou transforma XAML vinculando um caminho de carregamento e um caminho de salvamento como uma única operação. Um contexto de esquema diferente ou um sistema de tipo de suporte diferente pode ser usado para XamlReader e XamlWriter, que é o que influencia como o XAML resultante é transformado. Isso funciona bem para operações de transformação ampla.

Para operações que dependem do exame de cada nó em um fluxo de nó XAML, você normalmente não usa Transformo . Em vez disso, você precisa definir sua própria série de operação de caminho de salvamento de caminho de carga e interjeitar sua própria lógica. Em um dos caminhos, use um par de leitores XAML/gravadores XAML em torno de seu próprio loop de nó. Por exemplo, carregue o XAML inicial usando XamlXmlReader e entre nos nós com chamadas sucessivas Read . Operando no nível de fluxo de nó XAML, agora você pode ajustar nós individuais (tipos, membros, outros nós) para aplicar uma transformação ou deixar o nó como está. Em seguida, você envia o nó para a API relevante Write de um XamlObjectWriter e grava o objeto. Para obter mais informações, consulte Noções básicas sobre estruturas e conceitos de fluxo de nó XAML.

Confira também