Compartilhar via


Conversores de tipo de visão geral do XAML

Lógica de fonte de conversores de tipo para um gravador de objeto de uma seqüência de marcação XAML converte objetos específicos em um gráfico de objeto. No.NET Framework XAML Services, o conversor de tipo deve ser uma classe que deriva de TypeConverter. Alguns conversores também suportam o XAML que salvar o caminho e podem ser usados para serializar um objeto em um formulário de cadeia de caracteres na marcação de serialização. Este tópico descreve como e quando os conversores de tipo em XAML são invocados e fornece orientações de implementação para o método substitui de TypeConverter.

Este tópico contém as seguintes seções.

  • Conceitos de conversão de tipo
  • Implementing a Type Converter
  • Applying the TypeConverterAttribute
  • Acessando o contexto de provedor de serviço a partir de uma implementação de extensão de marcação
  • Conversores de tipo no fluxo de XAML nó
  • Tópicos relacionados

Conceitos de conversão de tipo

As seções a seguir explicam os conceitos básicos sobre como o XAML usa seqüências de caracteres, e como objeto gravadores no.NET Framework XAML Services use os conversores de tipo para processar alguns dos valores de seqüência de caracteres que são encontrados em uma fonte de XAML.

XAML and String Values

Quando você define um valor de atributo em um arquivo XAML, o tipo inicial desse valor é uma seqüência de caracteres em um sentido geral e um valor de atributo de seqüência de caracteres em um sentido XML. Até mesmo outros primitivos como Double são inicialmente seqüências de caracteres para um processador XAML.

Na maioria dos casos, um processador XAML precisa de duas partes de informações para processar um valor de atributo. The first piece of information is the value type of the property that is being set. Qualquer seqüência de caracteres que define um valor de atributo e o que é processado em XAML, por fim, deve ser convertida ou resolvida para um valor desse tipo. Se o valor for um primitivo que seja compreendido pelo analisador XAML (como, por exemplo, um valor numérico), uma conversão direta da seqüência de caracteres é tentada. Se o valor do atributo referencia uma enumeração, a string fornecida é verificada para uma correspondência de nome de uma constante nomeada no fato da enumeração. Se o valor for um primitivo compreendido o analisador nem um nome de uma enumeração de constante, tipo aplicável deve ser capaz de fornecer um valor ou referência que se baseia em uma seqüência de caracteres convertida.

Observação

As diretivas de linguagem XAML não utilize os conversores de tipo.

Conversores de tipo e as extensões de marcação

Usos da extensão de marcação devem ser manipulados por um processador XAML antes de verificar o tipo de propriedade e outras considerações. Por exemplo, se uma propriedade que está sendo definida como um atributo normalmente tem uma conversão de tipo, mas um caso em particular é definida por um uso de extensão de marcação, em seguida, o comportamento de extensão de marcação processa primeiro. Uma situação comum, onde é necessária uma extensão de marcação é fazer uma referência a um objeto que já existe. Para esse cenário, um conversor de tipo sem monitoração de estado só pode gerar uma nova instância não pode ser desejável. For more information about markup extensions, see Extensões de marcação de visão geral do XAML.

Conversores de tipo nativo

No WPF e.Implementações de serviços NET XAML, há certos tipos CLR que tenham o tratamento de conversão de tipo nativo, no entanto, mangueira de tipos CLR não é convencionalmente consideradas como primitivos. Um exemplo desse tipo é DateTime. Uma razão para isso é como o.Arquitetura do NET Framework funciona: o tipo de DateTime é definido em mscorlib, a biblioteca mais básica no.NET. DateTimenão é permitido para ser atribuído com um atributo que é proveniente de outro conjunto que apresenta uma dependência (TypeConverterAttribute é do sistema); Portanto, o mecanismo de descoberta de conversor tipo usual por atribuição não pode ser aceitos. Em vez disso, o analisador XAML tem uma lista de tipos que precisam de processamento nativo e processa esses tipos semelhantes de como os primitivos true são processados. No caso de DateTime, esse processamento envolve uma chamada para Parse.

Implementing a Type Converter

As seções a seguir discutem a API da TypeConverter classe.

TypeConverter

Em.Serviços de XAML do NET Framework, todos os conversores de tipo são usados para fins XAML são classes que derivam da classe base TypeConverter. O TypeConverter classe existia nas versões do.NET Framework antes de XAML existia; um dos original TypeConverter foi de cenários fornecer conversão de seqüência de caracteres para editores de propriedade no visual designers.

Para XAML, a função de TypeConverter é expandida. Para fins XAML, TypeConverter é a classe base para fornecer suporte para determinados a seqüência de caracteres e de seqüência de caracteres conversões. De seqüência de caracteres permite analisar um valor de atributo de seqüência de caracteres de XAML. A seqüência de caracteres pode habilitar o processamento de um valor de tempo de execução de uma propriedade de determinado objeto volta para um atributo em XAML para serialização.

TypeConverterDefine os quatro membros que são relevantes para converter a seqüência de caracteres e de seqüência para fins de processamento XAML:

Esses membros, o método mais importante é ConvertFrom, que converte a seqüência de caracteres de entrada para o tipo de objeto necessário. O ConvertFrom método pode ser implementado para converter uma grande variedade de tipos para o tipo de destino pretendido do conversor. Portanto, ele pode servir fins que ultrapassam o XAML, como, por exemplo, suporte a conversões de tempo de execução. No entanto, para o uso XAML, o caminho de código que pode processar um String a entrada é importante.

O método a segunda coisa mais importante é ConvertTo. Se um aplicativo for convertido em uma representação de marcação (por exemplo, se ele for salvo XAML como um arquivo), ConvertTo está envolvido no cenário maior de produzir de gravadores de texto um XAML uma representação de marcação. Nesse caso, o caminho de código importantes para o XAML é quando o chamador passa uma destinationType de String.

CanConvertTo and CanConvertFrom are support methods that are used when a service queries the capabilities of the TypeConverter implementation. Você deve implementar esses métodos para retornar true para o tipo específico de ocorrências que os métodos de conversão equivalente do seu suporte de conversor. Para fins XAML, isso geralmente significa que o String tipo.

Informações de cultura e conversores de tipo para XAML

Cada TypeConverter implementação exclusivamente pode interpretar o que é uma seqüência válida para uma conversão, e também pode usar ou ignorar a descrição do tipo que é passada como parâmetros. Uma consideração importante para a cultura e a conversão de tipo XAML é o seguinte: Embora o uso de cadeias de caracteres localizáveis como valores de atributo é suportado pelo XAML, é possível usar essas cadeias de caracteres localizáveis como entrada do conversor de tipo com os requisitos de cultura específica. Essa limitação é porque os conversores de tipo para os valores de atributo XAML envolvem um comportamento de processamento XAML do idioma necessariamente fixo usa en-US cultura. Para obter mais informações sobre as razões de design para essa restrição, consulte a especificação da linguagem XAML ([MS-xaml]) ou Visão geral de globalização e localização do WPF.

Como um exemplo onde a cultura pode ser um problema, algumas culturas utilize uma vírgula em vez de um período como o delimitador de ponto decimal para números em forma de seqüência. Esse uso entra em conflito com o comportamento de vários conversores de tipo existente tiverem, qual é usar uma vírgula como um delimitador. Passando uma cultura por meio de xml:lang no XAML ao redor não resolve o problema.

Implementing ConvertFrom

Para ser usada como um TypeConverter implementação que oferece suporte a XAML, o ConvertFrom método para que o conversor deve aceitar uma seqüência de caracteres como o value parâmetro. Se a seqüência de caracteres está em um formato válido e pode ser convertida por meio de TypeConverter a implementação, o objeto retornado deve oferecer suporte a projeção para o tipo que é esperado pela propriedade. Otherwise, the ConvertFrom implementation must return null.

Cada TypeConverter implementação exclusivamente pode interpretar o que constitui uma seqüência válida para uma conversão, e também pode usar ou ignorar a descrição do tipo ou contextos de cultura que são passados como parâmetros. No entanto, o processamento do WPF XAML podem não passar valores para o contexto de descrição do tipo em todos os casos e também podem não passar cultura com base no xml:lang.

Observação

Não use as chaves ({}), especificamente a chave de abertura ({}), como um elemento de seu formato de seqüência de caracteres.These characters are reserved as the entry and exit for a markup extension sequence.

É apropriado lançar uma exceção quando o conversor de tipo deve ter acesso a um serviço XAML da.Gravador de objeto de serviços de XAML do NET Framework, mas o GetService que é feita no contexto de chamada não retorna esse serviço.

Implementing ConvertTo

ConvertTopotencialmente é usado para suporte de serialização. Suporte de serialização por meio de ConvertTo para seu tipo personalizado e seu tipo de conversor é não um absoluto requisito. However, if you are implementing a control, or using serialization of as part of the features or design of your class, you should implement ConvertTo.

Para ser usada como um TypeConverter implementação que oferece suporte a XAML, o ConvertTo método para que o conversor deve aceitar uma instância do tipo (ou um valor) é suportada como o value parâmetro. Quando o destinationType parâmetro é do tipo String, o objeto retornado deve ser capaz de ser convertido como String. The returned string must represent a serialized value of value. Idealmente, o formato de serialização que você escolher deve ser capaz de gerar o mesmo valor, como se essa cadeia de caracteres foram passada para o ConvertFrom implementação do conversor do mesmo, sem perda significativa de informações.

Se o valor não pode ser serializado ou o conversor não oferece suporte a serialização, o ConvertTo implementação deve retornar null e pode lançar uma exceção. No entanto, se você lançar exceções, o relatório da incapacidade de usar a conversão como parte de sua CanConvertTo implementação para que a prática recomendada de verificação com CanConvertTo primeiro evitar exceções é suportado.

Se o destinationType parâmetro é não é do tipo String, você pode escolher seu próprio tratamento de conversor. Normalmente, reverter para o tratamento que na base de implementação base ConvertTo gera uma exceção específica.

É apropriado lançar uma exceção quando o conversor de tipo deve ter acesso a um serviço XAML da.Gravador de objeto de serviços de XAML do NET Framework, mas o GetService que é feita no contexto de chamada não retorna esse serviço.

Implementing CanConvertFrom

O CanConvertFrom implementação deve retornar true para sourceType do tipo String e caso contrário, adiar a implementação base. Não jogue exceções a partir de CanConvertFrom.

Implementing CanConvertTo

Your CanConvertTo implementation should return true for destinationType of type String, and otherwise defer to the base implementation. Não jogue exceções a partir de CanConvertTo.

Applying the TypeConverterAttribute

Para o conversor de tipo personalizado a ser usado como a agir para uma classe personalizada pelo conversor de tipo.NET Framework XAML Services, você deve aplicar o .NET Framework attribute TypeConverterAttribute em sua definição de classe. The ConverterTypeName that you specify through the attribute must be the type name of your custom type converter. Se você aplicar esse atributo, quando um processador XAML trata valores onde o tipo de propriedade usa o tipo de classe personalizada, ele pode seqüências de caracteres de entrada e retornar as instâncias de objeto.

You can also provide a type converter on a per-property basis. Instead of applying a .NET Framework attribute TypeConverterAttribute to the class definition, apply it to a property definition (the main definition, not the get/set implementations within it). The type of the property must match the type that is processed by your custom type converter. Com esse atributo aplicado, quando um processador XAML manipula os valores dessa propriedade, ela pode processar seqüências de caracteres de entrada e retornar as instâncias de objeto. The per-property type converter technique is particularly useful if you choose to use a property type from Microsoft .NET Framework or from some other library where you cannot control the class definition and cannot apply a TypeConverterAttribute there.

Para fornecer um comportamento de conversão de tipo de membro personalizado anexado, aplicar TypeConverterAttribute para o Get o método do acessador do padrão de implementação para o membro anexado.

Acessando o contexto de provedor de serviço a partir de uma implementação de extensão de marcação

Os serviços disponíveis são as mesmas para qualquer conversor de valor. A diferença é como o conversor de cada valor recebe o contexto do serviço. Acesso a serviços e os serviços disponíveis estão documentados no tópico Digite conversores e extensões de marcação XAML.

Conversores de tipo no fluxo de XAML nó

Se você estiver trabalhando com um fluxo de nó XAML, o resultado final de um conversor de tipo ou a ação não será executado ainda. Um caminho de carga, a seqüência de caracteres do atributo que eventualmente precisa ser convertido em tipo para carregar permanece como um valor de texto dentro de um membro de início e de um membro de fim. O conversor de tipo eventualmente é necessária para esta operação pode ser determinada utilizando o XamlMember.TypeConverter propriedade. No entanto, obtendo um valor válido de XamlMember.TypeConverter baseia-se de ter um contexto de esquema XAML, que podem acessar tais informações por meio do membro base ou o tipo de objeto de valor que usa o membro. Invocar o comportamento de conversão de tipo também requer o contexto de esquema XAML porque requer o mapeamento de tipo e a criação de uma instância do conversor.

Consulte também

Referência

TypeConverterAttribute

Conceitos

Visão geral do XAML (WPF)

Outros recursos

Digite conversores e extensões de marcação XAML