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 se tornam elementos XML em XAML, e propriedades dessas classes e estruturas se tornam atributos XML. Para ser instanciada em XAML, uma classe geralmente deve ter um construtor sem parâmetro público. 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 para esses tipos. O analisador XAML também pode manipular facilmente tipos de enumeração e pode combinar membros de enumeração se o tipo de enumeração estiver sinalizado com o Flags atributo.

Para auxiliar o analisador XAML, tipos mais complexos (ou propriedades desses tipos) podem incluir um que identifica uma TypeConverterAttribute classe derivada da TypeConverter qual oferece 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. Eles são conhecidos como elementos de objeto. A maioria das propriedades desses objetos são expressas 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 aparecer em um par de marcas 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. Em tempo de 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 a partir do construtor do arquivo code-behind.

Durante o InitializeComponent tempo de execução, na conclusão da chamada, todos os elementos do arquivo XAML foram instanciados e inicializados como se tivessem sido criados em 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 Xamarin.Forms elementos e a outra definindo um x prefixo 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 XamlCompilationAttributearquivo . Se o XAML não for compilado, o XAML será analisado em tempo de compilação e o arquivo XAML será incorporado 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 formulário binário e o processamento em tempo de execução será mais eficiente.

Especificidade da plataforma no arquivo XAML

Em XAML, a OnPlatform classe pode ser usada para selecionar 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 nomeadas iOS, Androide 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 marca.

OnPlatform é demonstrado 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 property-element não são necessárias. ContentPage define sua propriedade content como Content, e Layout<T> (a classe da qual StackLayout deriva) define sua propriedade content 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 configuração das Text propriedades e FormattedText do 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 marcas ou Label.Text :

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