Namespaces XAML em Xamarin.Forms
O XAML usa o atributo XML xmlns para declarações de namespace. Este artigo apresenta a sintaxe do namespace XAML e demonstra como declarar um namespace XAML para acessar um tipo.
Visão geral
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, conforme mostrado no exemplo de código XAML a seguir:
xmlns="http://xamarin.com/schemas/2014/forms"
O namespace padrão especifica que os elementos definidos no arquivo XAML sem prefixo se referem a Xamarin.Forms classes, como ContentPage
.
A segunda declaração de namespace usa o prefixo x
, conforme mostrado no exemplo de código XAML a seguir:
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 referenciar tipos dentro do namespace. A x
declaração de namespace especifica que os elementos definidos dentro do XAML com um prefixo de x
são usados para elementos e atributos intrínsecos ao XAML (especificamente a especificação XAML de 2009).
A tabela a seguir descreve os atributos de x
namespace suportados por Xamarin.Forms:
Constructo | Descrição |
---|---|
x:Arguments |
Especifica argumentos de 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 este constructo 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 serão associados. |
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 ResourceDictionary . O valor da chave é usado para recuperar o recurso XAML e normalmente é usado como o argumento para a extensão de marcação StaticResource . |
x:Name |
Especifica um nome de objeto de runtime 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:DataType
atributo, consulte Associações compiladas. Para obter mais informações sobre o atributo, consulte Modificadores de x:FieldModifier
campo. Para obter mais informações sobre os x:Arguments
atributos and x:FactoryMethod
, consulte Passando argumentos em XAML. Para obter mais informações sobre o x:TypeArguments
atributo, consulte Genéricos em XAML com Xamarin.Forms.
Observação
Além dos atributos de namespace listados acima, Xamarin.Forms também inclui extensões de marcação que podem ser consumidas por meio do prefixo de x
namespace. Para obter mais informações, consulte Consumindo extensões de marcação XAML.
No XAML, as declarações de namespace herdam do elemento pai para o 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.
Declarando 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 Common Language Runtime (CLR) e, opcionalmente, um nome de assembly. Isto é obtido definindo valores para as seguintes palavras-chave na declaração de namespace:
- clr-namespace: ou usando: – o namespace CLR declarado no assembly que contém os tipos a serem expostos como elementos XAML. Esta palavra-chave é necessária.
- assembly= – o assembly que contém o namespace CLR referenciado. Este valor é o nome do assembly, sem a extensão de arquivo. O caminho para o assembly deve ser estabelecido como uma referência no arquivo de projeto que contém o arquivo XAML que fará referência ao assembly. Essa palavra-chave poderá ser omitida se o valor clr-namespace estiver dentro do mesmo assembly que o código do aplicativo que está referenciando os tipos.
Observe que o caractere que separa o clr-namespace
token or using
de seu valor é dois-pontos, enquanto o caractere que separa o assembly
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:HelloWorld" ...>
...
</ContentPage>
Como alternativa, isto pode ser escrito como:
<ContentPage ... xmlns:local="using:HelloWorld" ...>
...
</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, conforme demonstrado no seguinte exemplo de código XAML:
<ContentPage ... xmlns:behaviors="clr-namespace:Behaviors;assembly=BehaviorsLibrary" ...>
...
</ContentPage>
O prefixo do namespace é especificado ao declarar uma instância de um tipo de um namespace importado, conforme demonstrado no seguinte exemplo de código XAML:
<ListView ...>
<ListView.Behaviors>
<behaviors:EventToCommandBehavior EventName="ItemSelected" ... />
</ListView.Behaviors>
</ListView>
Para obter informações sobre como definir um esquema de namespace personalizado, consulte Esquemas de namespace personalizados XAML.
Resumo
Este artigo apresentou a sintaxe do namespace XAML e demonstrou como declarar um namespace XAML para acessar um tipo. O XAML usa o atributo XML para declarações de namespace e os xmlns
tipos podem ser referenciados em XAML declarando um namespace XAML com um prefixo.