Partilhar via


x:Extensão de marcação estática

Faz referência a qualquer entidade de código estático por valor que seja definida de forma compatível com CLS (Common Language Specification). A propriedade estática referenciada pode ser usada para fornecer o valor de uma propriedade em XAML.

Uso de atributos XAML

<object property="{x:Static prefix:typeName.staticMemberName}" .../>

Valores XAML

Valor Descrição
prefix Opcional. Um prefixo que se refere a um namespace XAML mapeado e não padrão. prefix é mostrado explicitamente no uso porque você raramente faz referência a propriedades estáticas que vêm de um namespace XAML padrão. Ver Observações.
typeName Necessário. O nome do tipo que define o membro estático desejado.
staticMemberName Necessário. O nome do membro do valor estático desejado (uma constante, uma propriedade estática, um campo ou um valor de enumeração).

Comentários

A entidade de código referenciada deve ser uma das seguintes:

  • Uma constante
  • Uma propriedade estática
  • Um campo
  • Um valor de enumeração

Especificar qualquer outra entidade de código, como uma propriedade não estática, causa um erro em tempo de compilação se o XAML for marcado compilado ou uma exceção de análise de tempo de carregamento XAML.

Você pode fazer x:Static referências a campos estáticos ou propriedades que não estão no namespace XAML padrão para o documento XAML atual; no entanto, isso requer um mapeamento de prefixo. Os namespaces XAML são quase sempre definidos no elemento raiz do documento XAML.

As operações de pesquisa para propriedades estáticas podem ser executadas pelos Serviços XAML .NET e seus leitores e gravadores XAML, quando eles estão sendo executados com o contexto de esquema XAML padrão. Esse contexto de esquema XAML pode usar a reflexão CLR para fornecer os valores estáticos necessários para a construção de gráficos de objetos. O typeName especificado é, na verdade, um nome de tipo XAML, não um nome de tipo CLR, embora sejam essencialmente o mesmo nome ao usar o contexto de esquema XAML padrão ou ao usar todas as estruturas de implementação de XAML baseadas em CLR existentes.

Tenha cuidado ao fazer x:Static referências que não sejam diretamente do tipo de valor de uma propriedade. Na sequência de processamento XAML, os valores fornecidos de uma extensão de marcação não invocam a conversão de valor adicional. Isso é verdadeiro mesmo se sua referência de x:Static criar uma cadeia de caracteres de texto, e uma conversão de valor para valores de atributo com base na cadeia de caracteres de texto normalmente ocorre para esse membro específico ou para quaisquer valores de membro do tipo de retorno.

A sintaxe de atributo é a sintaxe mais comum usada com essa extensão de marcação. O token de cadeia de caracteres fornecido após a cadeia de caracteres de identificador de x:Static é atribuído como o valor Member da classe de extensão de StaticExtension subjacente.

Há dois outros usos de XAML que são tecnicamente possíveis. No entanto, esses usos são menos comuns porque são desnecessariamente detalhados:

  1. Sintaxe do elemento objeto.

    <x:Static Member="prefix:typeName.staticMemberName" ... />
    
  2. Sintaxe de atributo com propriedade Member explícita para cadeia de caracteres de inicialização.

    <object property="{x:Static Member=prefix:typeName.staticMemberName}" ... />
    

Na implementação dos Serviços XAML .NET, a manipulação para essa extensão de marcação é definida pela classe StaticExtension.

x:Static é uma extensão de marcação. Todas as extensões de marcação em XAML usam os caracteres { e } em sua sintaxe de atributo, que é a convenção pela qual um processador XAML reconhece que uma extensão de marcação deve fornecer um valor. Para obter mais informações sobre extensões de marcação, consulte Visão geral das extensões de marcação para XAML.

Notas de uso do WPF

O namespace XAML padrão que você usa para programação WPF não contém muitas propriedades estáticas úteis, e a maioria das propriedades estáticas úteis tem suporte, como conversores de tipo que facilitam o uso sem exigir {x:Static} . Para propriedades estáticas, você deve mapear um prefixo para um namespace XAML se uma das seguintes opções for verdadeira:

  • Você está fazendo referência a um tipo que existe no WPF, mas não faz parte do namespace XAML padrão para WPF (http://schemas.microsoft.com/winfx/2006/xaml/presentation). Este é um cenário bastante comum para usar x:Static. Por exemplo, você pode usar uma referência de x:Static com um mapeamento de namespace XAML para o namespace CLR System e o assembly mscorlib para fazer referência às propriedades estáticas da classe Environment.

  • Você está fazendo referência a um tipo de um assembly personalizado.

  • Você está fazendo referência a um tipo que existe em um assembly WPF, mas esse tipo está dentro de um namespace CLR que não foi mapeado para fazer parte do namespace XAML padrão do WPF. O mapeamento de namespaces CLR para o namespace XAML padrão para WPF é realizado por definições nos vários assemblies WPF (para obter mais informações sobre esse conceito, consulte Namespaces XAML e Mapeamento de namespace para WPF XAML). Namespaces CLR não mapeados podem existir se esse namespace CLR for composto principalmente de definições de classe que normalmente não são destinadas a XAML, como System.Windows.Threading.

Para obter mais informações sobre como usar prefixos e namespaces XAML para WPF, consulte Namespaces XAML e mapeamento de namespace para WPF XAML.

Ver também