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 tipos
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 dos Serviços XAML do .NET, os 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. TypeConvertertambém foi usado em implementações XAML específicas da estrutura anterior em Windows Presentation Foundation (WPF) e WCF (Windows Communication Foundation). Para obter mais informações sobre o TypeConverter XAML in, consulte Type Converters for XAML Overview.
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 MarkupExtension classe. 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 estã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 de 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 a visão geral das Extensões de Marcação para XAML.
Serializadores de valor
Um ValueSerializer é um conversor de tipo especializado que é otimizado para converter um objeto em uma cadeia de caracteres. A ValueSerializer para XAML pode não implementar o ConvertFrom
método. Uma ValueSerializer implementação obtém serviços de uma maneira semelhante a uma TypeConverter implementação. Os métodos virtuais fornecem um parâmetro de entrada context
. O context
parâmetro é do tipo IValueSerializerContext, que herda da IServiceProvider interface e tem um GetService método.
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 XamlType.ValueSerializer propriedade. O significado para gravadores XAML que executam a serialização é que, se houver XamlType.TypeConverter e XamlType.ValueSerializer existir, o conversor de tipo deve ser usado para o caminho de carga e o serializador de valor deve ser usado para o caminho de salvamento. Se XamlType.TypeConverter existir, mas XamlType.ValueSerializer existir null
, o conversor de tipo também será usado para o caminho de salvamento.
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 XamlValueConverter<TConverterBase> tipo.
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 tipos de propriedades em que uma extensão de marcação fornece um valor geralmente não é verificado em 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 ProvideValue
saída, 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. Geralmente, 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
Quando você implementa um conversor de valor, 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 tipos 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.