Compartilhar via


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 tipo XAML x:ArrayExtension em [MS-XAML].

Uso do elemento do objeto XAML

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

Valores XAML

Valor Descrição
typeName O nome do tipo que seu 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 de itens atribuído à propriedade ArrayExtension.Items intrínseca. Normalmente, esses itens são especificados como um ou mais elementos de objeto contidos no x:Array marcas de abertura e fechamento. Espera-se que os objetos especificados aqui sejam atribuíveis ao tipo XAML especificado em typeName.

Observações

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

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

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

Na implementação dos Serviços XAML do .NET, a manipulação dessa extensão de marcação é definida pela classe ArrayExtension. ArrayExtension não está 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 é mais destinado à extensibilidade geral da linguagem em XAML. Mas x:Array também pode ser útil para especificar valores XAML de determinadas propriedades que tomam coleções compatíveis com XAML como seu conteúdo de propriedade estruturada. Por exemplo, você pode especificar o conteúdo de uma propriedade IEnumerable com um uso de x:Array.

x:Array é uma extensão de marcação. As extensões de marcação normalmente são implementadas quando há um requisito para escapar de valores de atributo que não sejam valores literais ou nomes de manipulador, e o requisito é mais global do que apenas colocar conversores de tipo em determinados tipos ou propriedades. x:Array é parcialmente uma exceção a essa regra porque, em vez de fornecer tratamento de valor de atributo alternativo, x:Array fornece tratamento alternativo de seu conteúdo de texto interno. Esse comportamento permite que tipos que podem não ter suporte por um modelo de conteúdo existente sejam agrupados em uma matriz e referenciados posteriormente no code-behind acessando a matriz nomeada; você pode chamar métodos Array para obter itens de matriz individuais.

Todas as extensões de marcação no 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 paraXAML.

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

Notas de uso do WPF

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

Por exemplo, o seguinte é 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 dar suporte aos requisitos para ser instanciado em XAML como elementos de objeto. Para obter mais informações, consulte XAML e classes personalizadas parado WPF.

Consulte também