Compartilhar via


Conversores de tipo e extensões de marcação para XAML

Conversores de tipo e extensões de marcação são duas técnicas que sistemas de tipo XAML e gravadores XAML usam para gerar componentes de grafo de objeto. Embora compartilhem algumas características, conversores de tipo e extensões de marcação são representados de forma diferente em um fluxo de nó XAML. Neste conjunto de documentação, conversores de tipo, extensões de marcação e construções semelhantes às vezes são chamados coletivamente de conversores de valor.

Conversores de valor

No XAML, conversores de valor são usados para vários cenários. A lista a seguir mostra os diferentes tipos de conversores de valor em XAML:

  • Conversor de tipo

  • Extensão de marcação

  • Serializador de valor

  • Classe ou classe de suporte relacionada que fornece a lógica para uma sintaxe de texto XAML

Conversores de tipo

Na definição de Serviços XAML do .NET, conversores de tipo são classes que derivam da classe clr TypeConverter. TypeConverter é uma classe que estava no .NET antes do XAML existir. Sua finalidade original era dar suporte a janelas de propriedade e metáforas de edição baseadas em texto semelhantes para propriedades IDE. A introdução do XAML ao .NET usa TypeConverter para converter uma sintaxe de texto (conforme encontrado em um valor de atributo ou um nó de valor XAML) em um objeto. TypeConverter também pode ser usado para serializar um valor de objeto para a sintaxe de texto. TypeConverter também foi usado em implementações XAML específicas da estrutura anteriores no WPF (Windows Presentation Foundation) e no Windows Communication Foundation (WCF). Para obter mais informações sobre o TypeConverter no XAML, consulte Conversores de Tipo parade Visão Geral de XAML.

Extensões de marcação

Na implementação dos Serviços XAML do .NET, as extensões de marcação são classes que derivam da classe MarkupExtension. As extensões de marcação são um conceito que, nesse formulário, é originado pela linguagem XAML. Você pode pensar em uma extensão de marcação como sendo algo como uma sequência de escape extensível que chama uma classe de serviço para fornecer sua lógica. Em termos de marcação, os processadores XAML reconhecem universalmente uma extensão de marcação por uma sequência de texto que começa com uma chave de abertura ({) em uma cadeia de caracteres de texto.

As extensões de marcação diferem dos conversores de tipo. Os conversores de tipo normalmente são associados a tipos ou membros. Eles são invocados quando uma criação de grafo de objeto ou uma serialização encontra a sintaxe de texto associada a essas entidades.

As extensões de marcação são associadas a uma única classe de serviço de suporte, mas podem ser aplicadas a qualquer valor de membro. (No entanto, você pode implementar sua extensão de marcação para restringir deliberadamente seu uso a determinados membros ou tipos de destino usando o contexto do serviço.) As extensões de marcação podem substituir uma associação de conversor de tipo. Ou você pode usá-los para especificar um valor de atributo para membros que de outra forma não dão suporte a uma sintaxe de texto.

Para obter mais informações sobre o padrão de implementação de extensão de marcação para XAML, consulte extensões de marcação parade visão geral de XAML.

Serializadores de valor

Um ValueSerializer é um conversor de tipo especializado otimizado para converter um objeto em uma cadeia de caracteres. Um ValueSerializer para XAML pode não implementar o método ConvertFrom. Uma implementação ValueSerializer obtém serviços de maneira semelhante a uma implementação de TypeConverter. Os métodos virtuais fornecem um parâmetro de context de entrada. O parâmetro context é do tipo IValueSerializerContext, que herda da interface IServiceProvider e tem um método GetService.

No sistema de tipos XAML e em implementações de gravador XAML que usam o processamento de loop de nó XAML para serialização, um conversor de valor associado a um tipo ou membro é relatado por sua própria propriedade XamlType.ValueSerializer. O significado para os gravadores XAML que executam a serialização é que, se houver um XamlType.TypeConverter e XamlType.ValueSerializer, o conversor de tipo deverá ser usado para o caminho de carga e o serializador de valor deverá ser usado para o caminho de salvamento. Se XamlType.TypeConverter existir, mas XamlType.ValueSerializer for null, o conversor de tipo também será usado para salvar o caminho.

Outros Conversores de Valor

Um conversor de valor é extensível além dos padrões específicos de um conversor de tipo ou uma extensão de marcação. No entanto, essa personalização também exigiria a redefinição do sistema de tipos XAML, conforme fornecido pelos Serviços XAML do .NET. O sistema de tipo XAML existente tem representações e sistemas de relatórios para conversores de tipo, extensões de marcação e serializadores de valor, mas não para formas personalizadas de conversão de valor. Se você quiser criar conversores de valor personalizados, use o tipo XamlValueConverter<TConverterBase>.

Conversores de tipo e extensões de marcação em combinação

Extensões de marcação e conversores de tipo são usados para diferentes situações no XAML. Embora o contexto esteja disponível para usos de extensão de marcação, o comportamento de conversão de tipo de propriedades em que uma extensão de marcação fornece um valor geralmente não é verificado nas implementações de extensão de marcação. Em outras palavras, mesmo que uma extensão de marcação retorne uma cadeia de caracteres de texto como sua saída ProvideValue, o comportamento de conversão de tipo nessa cadeia de caracteres, conforme aplicado a uma propriedade específica ou tipo de valor de propriedade, não será invocado. Em geral, a finalidade de uma extensão de marcação é processar uma cadeia de caracteres e retornar um objeto sem nenhum conversor de tipo envolvido.

Contexto de serviço para um conversor de valor

Ao implementar um conversor de valor, você geralmente precisa de acesso a um contexto no qual o conversor de valor é aplicado. Esse contexto é conhecido como o contexto do serviço. O contexto de serviço pode incluir informações como o contexto de esquema XAML ativo, o acesso ao sistema de mapeamento de tipo que o contexto de esquema XAML e o gravador de objetos XAML fornecem e assim por diante. Para obter mais informações sobre os contextos de serviço disponíveis para um conversor de valor e como acessar os serviços que um contexto de serviço pode fornecer, consulte contextos de serviço disponíveis para conversores de tipo e extensões de marcação.

Consulte também