Extensão de marcação x:Static

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

Uso do Atributo 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. Consulte Observações.
typeName Obrigatório. O nome do tipo que define o membro estático desejado.
staticMemberName Obrigatório. O nome do membro de 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 do .NET e seus leitores XAML e gravadores XAML, quando estiverem 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 que você especifica é, na verdade, um nome de tipo XAML, não um nome de tipo CLR, embora eles 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 x:Static referência cria 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 da cadeia de caracteres fornecido após a cadeia de caracteres identificadora x:Static é atribuído como o valor Member da classe de extensão subjacente StaticExtension.

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 do .NET, a manipulação para essa extensão de marcação é definida pela StaticExtension classe.

x:Static é uma extensão da 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 sobre 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 a necessidade {x:Static} de . 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:Statico . Por exemplo, você pode usar uma x:Static referência com um mapeamento de namespace XAML para o namespace CLR e o System assembly mscorlib para fazer referência às propriedades estáticas da Environment classe.

  • 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 no namespace XAML padrão para WPF é executado 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.

Confira também