Compartilhar via


Resumo do Capítulo 7. XAML versus código

Observação

Este livro foi publicado na primavera de 2016 e não foi atualizado desde então. Há muito no livro que permanece valioso, mas parte do material está desatualizado e alguns tópicos não estão mais totalmente corretos ou completos.

Xamarin.Forms oferece suporte a uma linguagem de marcação baseada em XML chamada Extensible Application Markup Language ou XAML (pronuncia-se "zammel"). O XAML fornece uma alternativa ao C# na definição do layout da interface do usuário de um Xamarin.Forms aplicativo e na definição de associações entre elementos da interface do usuário e dados subjacentes.

Propriedades e atributos

Xamarin.Forms classes e estruturas tornam-se elementos XML em XAML, e as propriedades dessas classes e estruturas tornam-se atributos XML. Para ser instanciada em XAML, uma classe geralmente deve ter um construtor público sem parâmetros. Todas as propriedades definidas em XAML devem ter acessadores públicos set .

Para propriedades dos tipos de dados básicos (string, double, boole assim por diante), o analisador XAML usa os métodos padrão TryParse para converter configurações de atributo nesses tipos. O analisador XAML também pode lidar facilmente com tipos de enumeração e pode combinar membros de enumeração se o tipo de enumeração for sinalizado com o Flags atributo.

Para ajudar o analisador XAML, tipos mais complexos (ou propriedades desses tipos) podem incluir um TypeConverterAttribute que identifica uma classe derivada da TypeConverter qual dá suporte à conversão de valores de cadeia de caracteres para esses tipos. Por exemplo, o converte ColorTypeConverter nomes de cores e cadeias de caracteres, como "#rrggbb", em Color valores.

Sintaxe do elemento de propriedade

Em XAML, as classes e os objetos criados a partir delas são expressos como elementos XML. Estes são conhecidos como elementos de objeto. A maioria das propriedades desses objetos é expressa como atributos XML. Eles são chamados de atributos de propriedade.

Às vezes, uma propriedade deve ser definida como um objeto que não pode ser expresso como uma cadeia de caracteres simples. Nesse caso, o XAML dá suporte a uma marca chamada elemento de propriedade que consiste no nome da classe e no nome da propriedade separados por um ponto. Um elemento de objeto pode então aparecer dentro de um par de tags de elemento de propriedade.

Adicionando uma página XAML ao seu projeto

Uma Xamarin.Forms Biblioteca de Classes Portátil pode conter uma página XAML quando ela é criada pela primeira vez ou você pode adicionar uma página XAML a um projeto existente. Na caixa de diálogo para adicionar um novo item, escolha o item que se refere a uma página XAML ou ContentPage e XAML. (Não é um ContentView.)

Observação

As opções do Visual Studio foram alteradas desde que este capítulo foi escrito.

Dois arquivos são criados: um arquivo XAML com a extensão de nome de arquivo .xaml e um arquivo C# com a extensão .xaml.cs. O arquivo C# geralmente é chamado de code-behind do arquivo XAML. O arquivo code-behind é uma definição de classe parcial que deriva de ContentPage. No momento da compilação, o XAML é analisado e outra definição de classe parcial é gerada para a mesma classe. Essa classe gerada inclui um método chamado InitializeComponent que é chamado do construtor do arquivo code-behind.

Durante o tempo de execução, na conclusão da InitializeComponent chamada, todos os elementos do arquivo XAML foram instanciados e inicializados como se tivessem sido criados no código C#.

O elemento raiz no arquivo XAML é ContentPage. A marca raiz contém pelo menos duas declarações de namespace XML, uma para os elementos e outra definindo um x prefixo Xamarin.Forms para elementos e atributos intrínsecos a todas as implementações XAML. A marca raiz também contém um x:Class atributo que indica o namespace e o nome da classe que deriva de ContentPage. Isso corresponde ao namespace e ao nome da classe no arquivo code-behind.

A combinação de XAML e código é demonstrada pelo exemplo CodePlusXaml .

O compilador XAML

Xamarin.Forms tem um compilador XAML, mas seu uso é opcional com base no uso de um XamlCompilationAttribute. Se o XAML não for compilado, o XAML será analisado em tempo de compilação e o arquivo XAML será inserido na PCL, onde também será analisado em tempo de execução. Se o XAML for compilado, o processo de compilação converterá o XAML em um formato binário e o processamento de runtime será mais eficiente.

Especificidade da plataforma no arquivo XAML

Em XAML, a OnPlatform classe pode ser usada para selecionar a marcação dependente da plataforma. Essa é uma classe genérica e deve ser instanciada com um x:TypeArguments atributo que corresponda ao tipo de destino. A OnIdiom classe é semelhante, mas usada com muito menos frequência.

O uso de OnPlatform mudou desde que o livro foi publicado. Foi originalmente usado em conjunto com propriedades chamadas iOS, Android, e WinPhone. Agora é usado com objetos filho On . Defina a Platform propriedade como uma cadeia de caracteres consistente com os campos públicos const da Device classe. Defina a Value propriedade como um valor consistente com o x:TypeArguments atributo da OnPlatform tag.

OnPlatform é demonstrada no exemplo ScaryColorList , assim chamado porque contém blocos de XAML quase idênticos. A existência dessa marcação repetitiva sugere que técnicas devem estar disponíveis para reduzi-la.

Os atributos da propriedade content

Alguns elementos de propriedade ocorrem com bastante frequência, como a <ContentPage.Content> tag no elemento raiz de um ContentPage, ou a <StackLayout.Children> tag que inclui os filhos de StackLayout.

Cada classe tem permissão para identificar uma propriedade com um ContentPropertyAttribute na classe. Para essa propriedade, as marcas de elemento de propriedade não são necessárias. ContentPage define sua propriedade de conteúdo como Content, e Layout<T> (a classe da qual StackLayout deriva) define sua propriedade de conteúdo como Children. Essas marcas de elemento de propriedade não são necessárias.

O elemento de propriedade de Label é Text.

Texto formatado

O exemplo TextVariations contém vários exemplos de como definir as Text propriedades e FormattedText de Label. Em XAML, Span os objetos aparecem como filhos do FormattedString objeto.

Quando uma cadeia de caracteres de várias linhas é definida como a propriedade, os Text caracteres de fim de linha são convertidos em caracteres de espaço, mas os caracteres de fim de linha são preservados quando uma cadeia de caracteres de várias linhas aparece como conteúdo das Label tags or Label.Text :

Captura de tela tripla do compartilhamento de variações de texto