Extensão de marcação x:Array

Fornece suporte geral para matrizes de objetos em XAML por meio de uma extensão de marcação. Isso corresponde ao x:ArrayExtension tipo XAML em [MS-XAML].

Uso de elemento Object do XAML

<x:Array Type="typeName">
  arrayContents
</x:Array>

Valores XAML

Valor Descrição
typeName O nome do tipo que você x:Array conterá. typeName pode ser (e geralmente é) prefixado para um namespace XAML que contém as definições de tipo XAML.
arrayContents O conteúdo dos itens atribuído à propriedade intrínseca ArrayExtension.Items . Normalmente, esses itens são especificados como um ou mais elementos de objeto contidos nas tags de x:Array abertura e fechamento. Espera-se que os objetos especificados aqui sejam atribuíveis ao tipo XAML especificado em typeName.

Comentários

Type é um atributo obrigatório para todos os x:Array elementos do objeto. Um Type valor de parâmetro não precisa usar uma extensão de marcação, o nome curto do tipo é um tipo XAML, que pode ser especificado como uma x:Type cadeia de caracteres.

Na implementação dos Serviços XAML do .NET, a relação entre o tipo XAML de entrada e o CLR Type de saída da matriz criada é influenciada pelo contexto de serviço para extensões de marcação. A saída Type é o UnderlyingType do tipo XAML de entrada, depois de procurar o necessário XamlType com base no contexto do esquema XAML e no IXamlTypeResolver serviço fornecido pelo contexto.

Quando processado, o conteúdo da matriz é atribuído à ArrayExtension.Items propriedade intrínseca. ArrayExtension Na implementação, isso é representado por ArrayExtension.Items.

Na implementação dos Serviços XAML do .NET, a manipulação para essa extensão de marcação é definida pela ArrayExtension classe. ArrayExtension não é lacrado e pode ser usado como base para uma implementação de extensão de marcação para um tipo de matriz personalizado.

x:Array destina-se mais à extensibilidade geral da linguagem em XAML. Mas x:Array também pode ser útil para especificar valores XAML de determinadas propriedades que usam coleções com suporte XAML como seu conteúdo de propriedade estruturada. Por exemplo, você pode especificar o conteúdo de uma IEnumerable propriedade com um x:Array uso.

x:Array é uma extensão da marcação. Extensões de marcação são tipicamente implementadas quando existe um requisito que permite que valores de atributo sejam diferentes de valores literais ou nomes de manipuladores, e o requisito é mais global do que simplesmente colocar conversores de tipo em certos tipos ou propriedades. x:Array é parcialmente uma exceção a essa regra porque, em vez de fornecer manipulação alternativa de valor de atributo, x:Array fornece manipulação alternativa de seu conteúdo de texto interno. Esse comportamento permite que tipos que podem não ser suportados por um modelo de conteúdo existente sejam agrupados em uma matriz e referenciados posteriormente em code-behind acessando a matriz nomeada; Você pode chamar Array métodos para obter itens de matriz individuais.

Todas as extensões de marcação em XAML usam as chaves ({,}) em sua sintaxe de atributo, que é a convenção pela qual um processador XAML reconhece que uma extensão de marcação deve processar o valor do atributo. Para obter mais informações sobre extensões de marcação em geral, consulte Conversores de tipo e extensões de marcação para XAML.

No XAML 2009, x:Array é definido como uma primitiva de linguagem em vez de uma extensão de marcação. Para obter mais informações, consulte Tipos internos para primitivas de linguagem XAML comuns.

Notas de uso do WPF

Normalmente, os elementos de objeto que preenchem um não são elementos que existem no namespace XAML do WPF e exigem um mapeamento de prefixo para um x:Array namespace XAML não padrão.

Por exemplo, a seguir está uma matriz simples de duas cadeias de caracteres, com o prefixo sys (e também x) definido no nível da matriz.

<x:Array Type="sys:String"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib">
  <sys:String>Hello</sys:String>
  <sys:String>World</sys:String>
</x:Array>

Para tipos personalizados que são usados como elementos de matriz, a classe também deve oferecer suporte aos requisitos para ser instanciada em XAML como elementos de objeto. Para obter mais informações, consulte XAML e classes personalizadas para WPF.

Confira também