Namespaces XAML

O XAML usa o xmlns atributo XML para declarações de namespace. Há duas declarações de namespace XAML que estão sempre dentro do elemento raiz de um arquivo XAML. O primeiro define o namespace padrão:

xmlns="http://schemas.microsoft.com/dotnet/2021/maui"

O namespace padrão especifica que os elementos definidos no arquivo XAML sem prefixo se referem a classes .NET Multi-platform App UI (.NET MAUI), como ContentPage, Labele Button.

A segunda declaração de namespace usa o prefixo x :

xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"

O XAML usa prefixos para declarar namespaces não padrão, com o prefixo sendo usado ao fazer referência a tipos dentro do namespace. A x declaração de namespace especifica que os elementos definidos em XAML com um prefixo de são usados para elementos e atributos intrínsecos ao XAML (especificamente a especificação XAML de x 2009).

A tabela a seguir descreve as x construções suportadas pelo .NET MAUI:

Constructo Descrição
x:Arguments Especifica argumentos do construtor para um construtor não padrão ou para uma declaração de objeto de método de fábrica.
x:Class Especifica o namespace e o nome da classe para uma classe definida em XAML. O nome da classe deve corresponder ao nome da classe do arquivo code-behind. Observe que essa construção só pode aparecer no elemento raiz de um arquivo XAML.
x:DataType Especifica o tipo do objeto ao qual o elemento XAML e seus filhos se vincularão.
x:FactoryMethod Especifica um método de fábrica que pode ser usado para inicializar um objeto.
x:FieldModifier Especifica o nível de acesso para campos gerados para elementos XAML nomeados.
x:Key Especifica uma chave exclusiva definida pelo usuário para cada recurso em um ResourceDictionaryarquivo . O valor da chave é usado para recuperar o recurso XAML e normalmente é usado como argumento para a StaticResource extensão de marcação.
x:Name Especifica um nome de objeto de tempo de execução para o elemento XAML. A configuração x:Name é semelhante à declaração de uma variável no código.
x:TypeArguments Especifica os argumentos de tipo genérico para o construtor de um tipo genérico.

Para obter mais informações sobre o atributo x:DataType , consulte Associações compiladas. Para obter mais informações sobre o x:FieldModifier atributo, consulte Modificadores de campo. Para obter mais informações sobre os x:Arguments atributos e x:FactoryMethod , consulte Passar argumentos. Para obter mais informações sobre o x:TypeArguments atributo, consulte Genéricos.

Constructo Descrição
x:Arguments Especifica argumentos do construtor para um construtor não padrão ou para uma declaração de objeto de método de fábrica.
x:Class Especifica o namespace e o nome da classe para uma classe definida em XAML. O nome da classe deve corresponder ao nome da classe do arquivo code-behind. Observe que essa construção só pode aparecer no elemento raiz de um arquivo XAML.
x:ClassModifier Especifica o nível de acesso para a classe gerada no assembly.
x:DataType Especifica o tipo do objeto ao qual o elemento XAML e seus filhos se vincularão.
x:FactoryMethod Especifica um método de fábrica que pode ser usado para inicializar um objeto.
x:FieldModifier Especifica o nível de acesso para campos gerados para elementos XAML nomeados.
x:Key Especifica uma chave exclusiva definida pelo usuário para cada recurso em um ResourceDictionaryarquivo . O valor da chave é usado para recuperar o recurso XAML e normalmente é usado como argumento para a StaticResource extensão de marcação.
x:Name Especifica um nome de objeto de tempo de execução para o elemento XAML. A configuração x:Name é semelhante à declaração de uma variável no código.
x:TypeArguments Especifica os argumentos de tipo genérico para o construtor de um tipo genérico.

Para obter mais informações sobre o x:ClassModifier atributo, consulte Modificadores de classe. Para obter mais informações sobre o atributo x:DataType , consulte Associações compiladas. Para obter mais informações sobre o x:FieldModifier atributo, consulte Modificadores de campo. Para obter mais informações sobre os x:Arguments atributos e x:FactoryMethod , consulte Passar argumentos. Para obter mais informações sobre o x:TypeArguments atributo, consulte Genéricos.

Observação

Além das construções listadas acima, o .NET MAUI também inclui extensões de marcação que podem ser consumidas por meio do prefixo do x namespace. Para obter mais informações, consulte Consumir extensões de marcação XAML.

Em XAML, as declarações de namespace herdam de elemento pai para elemento filho. Portanto, ao definir um namespace no elemento raiz de um arquivo XAML, todos os elementos dentro desse arquivo herdam a declaração de namespace.

Declarar namespaces para tipos

Os tipos podem ser referenciados em XAML declarando um namespace XAML com um prefixo, com a declaração de namespace especificando o nome do namespace CLR (Common Language Runtime) e, opcionalmente, um nome de assembly. Isso é obtido definindo valores para as seguintes palavras-chave dentro da declaração de namespace:

  • clr-namespace: ou using: – o namespace CLR declarado no assembly que contém os tipos a serem expostos como elementos XAML. Esta palavra-chave é obrigatória.
  • assembly= – o assembly que contém o namespace CLR referenciado. Esse valor é o nome do assembly, sem a extensão de arquivo. O caminho para o assembly deve ser estabelecido como uma referência no projeto que contém o arquivo XAML que fará referência ao assembly. Essa palavra-chave pode ser omitida se o valor clr-namespace estiver dentro do mesmo assembly que o código do aplicativo que está fazendo referência aos tipos.

Observação

O caractere que separa o token ou using de seu valor é um dois-pontos, enquanto o caractere que separa o clr-namespaceassembly token de seu valor é um sinal de igual. O caractere a ser usado entre os dois tokens é um ponto-e-vírgula.

O exemplo de código a seguir mostra uma declaração de namespace XAML:

<ContentPage ... xmlns:local="clr-namespace:MyMauiApp">
  ...
</ContentPage>

Alternativamente, isso pode ser escrito como:

<ContentPage ... xmlns:local="using:MyMauiApp">
  ...
</ContentPage>

O local prefixo é uma convenção usada para indicar que os tipos dentro do namespace são locais para o aplicativo. Como alternativa, se os tipos estiverem em um assembly diferente, o nome do assembly também deverá ser definido na declaração de namespace:

<ContentPage ... xmlns:controls="clr-namespace:Controls;assembly=MyControlLibrary" ...>
  ...
</ContentPage>

O prefixo do namespace é especificado ao declarar uma instância de um tipo de um namespace importado:

<controls:Expander IsExpanded="True">
    ...
</controls:Expander>

Para obter informações sobre como definir um esquema de namespace personalizado, consulte Esquemas de namespace personalizados.