Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

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

.NET Framework (current version)
 

Conversores de tipo e extensões de marcação são duas técnicas que usam sistemas de tipos XAML e criadores de XAML para gerar os componentes de gráfico do objeto. Embora eles compartilham algumas características, conversores de tipo e extensões de marcação são representadas de maneira diferente em um fluxo de nó XAML. Nesta documentação conjunto, conversores de tipo, extensões de marcação e construções semelhantes são, às vezes, coletivamente denominadas conversores de valor.

No XAML, conversores de valor são usados para diversos 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 relacionada ou classe de suporte que fornece a lógica para uma sintaxe de texto XAML

Na definição de serviços XAML do .NET Framework, conversores de tipo são classes que derivam de CLR TypeConverter classe. TypeConverter é uma classe que se encontrava o Microsoft .NET Framework antes da existência desse XAML. Seu propósito original era oferecer suporte a janelas de propriedade e semelhante baseado em texto edição metáforas de IDE Propriedades. A introdução de XAML do .NET Framework usa TypeConverter para converter uma sintaxe de texto (como o 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 do texto. TypeConverter também foi usada nas implementações anteriores de XAML específicas do framework em Windows Presentation Foundation (WPF) e Windows Communication Foundation (WCF). Para obter mais informações sobre o TypeConverter em XAML, consulte Visão geral de conversores de tipo para XAML.

Na implementação de serviços de XAML do .NET Framework, extensões de marcação são classes que derivam de MarkupExtension classe. Extensões de marcação são um conceito que originou a linguagem XAML nesse formulário. 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, processadores XAML universalmente reconhecem 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.

Extensões de marcação são diferentes de conversores de tipo. Conversores de tipo são geralmente associados a tipos ou membros. Eles são chamados quando a criação de um gráfico de objeto ou uma serialização encontra a sintaxe do texto que está associado essas entidades.

Extensões de marcação estão associadas uma única classe de serviço de suporte, mas podem ser aplicadas para qualquer valor de membro. (No entanto, você pode implementar sua extensão de marcação para impedir que seu uso deliberadamente a certos membros ou tipos de destino, usando o contexto de serviço). Extensões de marcação podem substituir uma associação de tipo de conversor. Ou você pode usá-las para especificar um valor de atributo para membros que caso contrário, não dará suporte a uma sintaxe de texto.

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

System_CAPS_noteObservação

O MarkupExtension e ValueSerializer tipos estão no System.Windows.Markup namespace e não no System.Xaml namespace. Isso não significa que esses tipos são específicos para o WPF ou Windows Forms tecnologias que preenchem caso contrário, o CLR namespaces que contêm a cadeia de caracteres Windows. MarkupExtension e ValueSerializer estão no assembly System. XAML e não têm nenhuma dependência de estrutura específico. Esses tipos existiam no namespace CLR para .NET Framework 3.0 e permanecem no namespace CLR em .NET Framework 4 para evitar que as referências em projetos WPF existentes. Para obter mais informações, consulte Tipos migrados do WPF para System.Xaml.

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

No sistema de tipos XAML e implementações de gravador XAML que usam processamento de loop de nó XAML para serialização, um conversor de valor que está associado um tipo ou membro é reportado pelo seu próprio XamlType.ValueSerializer propriedade. O significado para criadores de XAML que executam a serialização é que, se um XamlType.TypeConverter e XamlType.ValueSerializer existir, o conversor de tipo deve ser usado para o caminho de carregamento e o serializador de valor deve ser usado para salvar caminho. Se XamlType.TypeConverter existe mas XamlType.ValueSerializer é null, o conversor de tipos também é usado para salvar caminho.

Um conversor de valor é extensível além de 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 do XAML, conforme fornecido por serviços de XAML do .NET Framework. O sistema de tipos 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 formulários personalizados de conversão de valor. Se você quiser criar conversores de valor personalizado, use o XamlValueConverter<TConverterBase> tipo.

Conversores de extensões e tipo de marcação são usados para diferentes situações em XAML. Embora o contexto está disponível para os usos de extensão de marcação, comportamento de conversão de tipo de propriedades em que uma extensão de marcação fornece que um valor é geralmente não é verificado em implementações de extensão de marcação. Em outras palavras, mesmo se uma extensão de marcação retorna uma cadeia de caracteres de texto como seu ProvideValue de saída, comportamento de conversão de tipo sobre essa cadeia de caracteres conforme aplicado a uma propriedade específica ou um tipo de valor de propriedade não é invocado. Em geral, a finalidade de uma extensão de marcação é processar uma cadeia de caracteres e retornar um objeto sem qualquer conversor de tipo envolvidos.

Ao implementar um conversor de valor, você geralmente precisa de acesso a um contexto em que o conversor de valor é aplicado. Esse contexto é conhecido como o contexto do serviço. O contexto de serviço podem incluir informações como o contexto do esquema XAML active, acesso ao sistema de mapeamento de tipo que o contexto do esquema XAML e o gravador de objeto XAML fornecerem 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 pode fornecer um contexto de serviço, consulte Contextos de serviço disponíveis para conversores de tipo e extensões de marcação.

Mostrar: