Extensão de marcação x:Static
Faz referência a qualquer entidade de código estática por valor 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 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 provenientes de um namespace XAML padrão. Consulte Comentários. |
typeName |
Necessário. O nome do tipo que define o membro estático desejado. |
staticMemberName |
Necessário. O nome do membro de valor estático desejado (uma constante, uma propriedade estática, um campo ou um valor de enumeração). |
Observações
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, causará um erro de tempo de compilação se o XAML for compilado ou uma exceção de análise de tempo de carga XAML.
Você pode fazer referências x:Static
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 estão em execução 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 do grafo de objeto. O typeName
que você especificar é, 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 XAML baseadas em CLR existentes.
Tenha cuidado ao fazer referências x:Static
que não sejam diretamente o 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 conversão de valor adicional. Isso é verdadeiro mesmo se a referência 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 ocorrer para esse membro específico ou para quaisquer valores de membro do tipo de retorno.
A sintaxe do atributo é a sintaxe mais comum usada com essa extensão de marcação. O token de cadeia de caracteres fornecido após o x:Static
cadeia de caracteres do identificador é atribuído como o valor Member da classe de extensão StaticExtension subjacente.
Há dois outros usos XAML que são tecnicamente possíveis. No entanto, esses usos são menos comuns porque são desnecessariamente detalhados:
Sintaxe do elemento object.
<x:Static Member="prefix:typeName.staticMemberName" ... />
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 dessa extensão de marcação é definida pela classe StaticExtension.
x:Static
é uma extensão de marcação. Todas as extensões de marcação no 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 Extensões de Marcação parade Visão Geral de XAML.
Notas de uso do WPF
O namespace XAML padrão usado 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 de {x:Static}
. Para propriedades estáticas, você deve mapear um prefixo para um namespace XAML se um dos seguintes for verdadeiro:
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
). Esse é um cenário bastante comum para usarx:Static
. Por exemplo, você pode usar uma referênciax:Static
com um mapeamento de namespace XAML para o namespace System CLR 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 do 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 do 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 por definições de classe que normalmente não se destinam 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 paraXAML do WPF.
Consulte também
- de Extensão de Marcação x:Type
- tipos de migrados do WPF para o System.Xaml
.NET Desktop feedback