Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
XAML (Extensible Application Markup Language) é a linguagem de marcação declarativa usada para definir UI em aplicações WinUI. Descreve a estrutura e as propriedades da interface do utilizador em ficheiros .xaml e gere a lógica e os eventos num ficheiro code-behind associado.
O que é XAML?
XAML é uma linguagem baseada em XML para criar objetos e definir as suas propriedades. Declaras elementos da interface — botões, caixas de texto, layouts — em marcação, e usas um ficheiro code-behind para responder a eventos e manipular esses elementos em tempo de execução.
Como o XAML é um formato de intercâmbio baseado em texto, designers e desenvolvedores podem trabalhar de forma independente: os designers criam a estrutura visual em XAML, os desenvolvedores implementam a lógica no code-behind, e ambos podem iterar sem bloquearem o trabalho um do outro.
Sintaxe XAML básica
Todo o XAML válido também é XML válido, mas o XAML acrescenta conceitos próprios adicionais. Por exemplo, a sintaxe dos elementos de propriedade permite-lhe definir uma propriedade como um elemento XML aninhado em vez de uma cadeia de atributos — XML válido, mas com significado extra em XAML.
Para detalhes completos da sintaxe, consulte o guia da sintaxe XAML.
XAML e Visual Studio
O editor XAML do Visual Studio fornece IntelliSense, auto-completamento e uma superfície de design visual. Os erros aparecem em linha como rabiscos antes de compilar. Não precisas de memorizar todas as regras de sintaxe — deixa que o IDE te guie.
Namespaces XAML
Cada ficheiro XAML declara namespaces no seu elemento raiz. Uma página típica do WinUI começa com duas:
<Page
x:Class="Application1.BlankPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
-
Namespace predefinido (
xmlns=): Contém todos os controlos incorporados do WinUI, texto, gráficos, ligação de dados e tipos de estilo. A maior parte do teu XAML usa este namespace sem prefixo. -
Espaço de nomes da linguagem XAML (
xmlns:x=): Mapeado para ox:prefixo, fornece funcionalidades essenciais da linguagem.
O espaço de nomes x:
| Attribute | Purpose |
|---|---|
| x:Chave | Chave única para um recurso num ResourceDictionary |
| x:Classe | Associa o ficheiro XAML à classe de código subjacente |
| x:Nome | Atribui um nome de runtime para que o code-behind possa referenciar o elemento |
| x:Uid | Marca elementos para substituição localizada de recursos |
| Tipos intrínsecos XAML | Expressa valores simples (como x:Boolean) como elementos de objeto |
Mapeamento de tipos personalizados
Para usar os seus próprios tipos ou tipos de bibliotecas de terceiros em XAML, declare um prefixo de namespace que se mapeie para o namespace de código:
xmlns:myTypes="using:myCompany.myTypes"
Depois referencia esses tipos com o prefixo:
<myTypes:CustomButton/>
Para detalhes, incluindo considerações sobre C++/CX, veja espaços de nomes XAML e mapeamento de espaços de nomes.
Espaços de nomes de designer e compatibilidade
Verá frequentemente os prefixos d: (designer) e mc: (compatibilidade de marcação) em XAML gerado por ferramentas. Estes suportam ferramentas de conceção e podem ser ignorados com segurança em tempo de execução. Para mais detalhes, veja Outros espaços de nomes XAML.
Extensões de marcação
As extensões de marcação permitem definir uma propriedade para algo que não pode ser expresso como uma string simples — como uma referência a um recurso partilhado ou uma ligação de dados. Usam a sintaxe de chavetas:
<Button Style="{StaticResource SearchButtonStyle}"/>
Sem {StaticResource}, seria necessário um elemento de propriedade verboso para atribuir um Style. As extensões de marcação mantêm o XAML conciso.
O XAML do Windows Runtime suporta estas extensões de marcação:
| Extension | Purpose |
|---|---|
| {x:Bind} | Ligação de dados em tempo de compilação (melhor desempenho) |
| {Vinculação} | Ligação de dados em tempo de execução |
| {StaticResource} | Referenciar uma entrada ResourceDictionary por chave |
| {ThemeResource} | Como {StaticResource}, mas é atualizado quando o tema da aplicação muda |
| {TemplateBinding} | Associar a uma propriedade do elemento principal de um modelo de controlo |
| {RelativeSource} | Associar em relação ao progenitor do modelo |
| {CustomResource} | Pesquisa avançada de recursos personalizados |
| {x:Null} | Defina explicitamente um valor anulável como null |
As extensões de marcação podem ser aninhadas; A mais interna é avaliada primeiro.
Events
Associe processadores de eventos em XAML especificando o evento como um atributo e o nome do método processador como respetivo valor:
<Button Click="showUpdatesButton_Click">Show updates</Button>
O compilador espera um método correspondente em code-behind com a assinatura correta de delegado:
private void showUpdatesButton_Click(object sender, RoutedEventArgs e)
{
// your code
}
void showUpdatesButton_Click(Windows::Foundation::IInspectable const&, Microsoft::UI::Xaml::RoutedEventArgs const&);
Observação
Em C++/CX, cada página XAML tem dois ficheiros code-behind: um cabeçalho (.xaml.h) e uma implementação (.xaml.cpp).
Para mais informações, consulte Visão Geral de Eventos e Eventos Roteados.
Dicionários de recursos
A ResourceDictionary armazena objetos reutilizáveis — pincéis, estilos, modelos — identificados por x:Key. Os recursos podem estar na secção de recursos de uma página ou num ficheiro separado .xaml . Para uma explicação completa, consulte ResourceDictionary e referências de recursos XAML.
XAML e XML
XAML é um superconjunto de XML com algumas coisas a saber:
- Sensível a maiúsculas e minúsculas: Os nomes dos elementos e dos atributos devem corresponder exatamente.
-
xml:lang: Válido em XAML, mas corresponde ao comportamento de runtime ao nível do framework, não ao comportamento de parse. - Codificação: Apenas UTF-8 e UTF-16 são suportados.
namescopes de XAML
Os nomes atribuídos a x:Name devem ser únicos dentro do seu âmbito de nomes. Os namescopes são particularmente relevantes dentro dos modelos de controlo, onde os nomes são direcionados para o modelo em vez da página. Para mais detalhes, veja nomescópios XAML.
Sugestões de desempenho
- Defina os pincéis frequentemente utilizados como recursos
SolidColorBrushem vez de repetir valores literais de cor. - Coloque os recursos partilhados por várias páginas em
Application.Resources; mantenha os recursos específicos de cada página nessa página. - Remova recursos não utilizados (chaves sem
{StaticResource}referências) antes de enviar. - Evite sobrepor os modelos de controlo — os valores por defeito já estão otimizados para o desempenho de carga.
- Use
Bordere faça layout de contentores em vez de desenhar o mesmo pixel várias vezes (sobredesenho). - Use os modelos de itens predefinidos para
ListVieweGridView; a suaPresenterlógica está ajustada para listas grandes.
Para mais orientações, consulte Otimizar a sua marcação XAML.
Depurar XAML
Não podes definir pontos de interrupção nos .xaml ficheiros, mas o Visual Studio oferece outras ajudas:
- Tempo de design: Os rabiscos e marcadores de erro aparecem em linha enquanto escreves.
-
Tempo de execução: As falhas de análise lançam uma
XamlParseException(ou uma exceção estruturada semelhante em C++/CX) com o contexto do número de linha no ficheiro XAML.
Para o tratamento de erros em tempo de execução, consulte Gestão de exceções para aplicações WinUI em C# ou Visual Basic. Para iniciar uma sessão de depuração, veja Iniciar uma sessão de depuração.
Windows developer