A maior rede de estudos do Brasil

Grátis
1800 pág.
indroducao Xammarin.Froms

Pré-visualização | Página 21 de 50

o 
Resources propriedade é definida por VisualElement , e você pode ter Resources coleções em outros
elementos na página. Por exemplo, tente adicionar um para o StackLayout neste exemplo:
Você descobrirá que a cor do texto dos botões agora é azul. Basicamente, sempre que o analisador XAML
encontra uma StaticResource extensão de marcação, ele pesquisa a árvore visual e usa a primeira 
ResourceDictionary encontra contendo essa chave.
Um dos tipos mais comuns de objetos armazenados em dicionários de recursos é o xamarin. Forms Style , que
define uma coleção de configurações de propriedade. Estilos são discutidos neste artigo estilos.
Às vezes, os desenvolvedores de novos no XAML esteja se perguntando se eles podem colocar um elemento
visual, como Label ou Button em um ResourceDictionary . Embora seja certamente possível, ele não faz muito
sentido. A finalidade de ResourceDictionary é compartilhar objetos. Um elemento visual não pode ser
compartilhado. A mesma instância não pode aparecer duas vezes em uma única página.
Apesar das semelhanças de seus nomes x:Static e StaticResource são muito diferentes. StaticResource
Retorna um objeto de um dicionário de recursos enquanto x:Static acessa um dos seguintes:
um campo estático público
uma propriedade estática pública
um campo constante público
um membro de enumeração.
O StaticResource extensão de marcação é suportada por implementações de XAML que definem um
dicionário de recursos, enquanto x:Static é uma parte intrínseca de XAML, como o x revela de prefixo.
<Label Text="Hello, XAML!"
 VerticalOptions="{x:Static LayoutOptions.Start}"
 HorizontalTextAlignment="{x:Static TextAlignment.Center}"
 TextColor="{x:Static Color.Aqua}" />
using System;
using Xamarin.Forms;
namespace XamlSamples
{
 static class AppConstants
 {
 public static readonly Thickness PagePadding;
 public static readonly Font TitleFont;
 public static readonly Color BackgroundColor = Color.Aqua;
 public static readonly Color ForegroundColor = Color.Brown;
 static AppConstants()
 {
 switch (Device.RuntimePlatform)
 {
 case Device.iOS:
 PagePadding = new Thickness(5, 20, 5, 0);
 TitleFont = Font.SystemFontOfSize(35, FontAttributes.Bold);
 break;
 case Device.Android:
 PagePadding = new Thickness(5, 0, 5, 0);
 TitleFont = Font.SystemFontOfSize(40, FontAttributes.Bold);
 break;
 case Device.UWP:
 PagePadding = new Thickness(5, 0, 5, 0);
 TitleFont = Font.SystemFontOfSize(50, FontAttributes.Bold);
 break;
 }
 }
 }
}
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
Aqui estão alguns exemplos que demonstram como x:Static pode referenciar explicitamente os campos
estáticos e membros de enumeração:
Até agora, isso não seja muito impressionante. Mas o x:Static extensão de marcação pode também fazer
referência a campos estáticos ou propriedades de seu próprio código. Por exemplo, aqui está um AppConstants
classe que contém alguns campos estáticos que você talvez queira usar em várias páginas em um aplicativo:
Para fazer referência os campos estáticos dessa classe no arquivo XAML, você precisará de uma forma de
indicar dentro do arquivo XAML em que esse arquivo está localizado. Você pode fazer isso com uma declaração
de namespace XML.
Lembre-se de que os arquivos XAML criados como parte do modelo de XAML de xamarin. Forms padrão
contêm duas declarações de namespace XML: um para acesso de classes xamarin. Forms e outro para fazer
referência a marcas e atributos intrínsecos ao XAML:
xmlns:local="clr-namespace:XamlSamples"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
 xmlns:local="clr-namespace:XamlSamples"
 xmlns:sys="clr-namespace:System;assembly=mscorlib"
 x:Class="XamlSamples.StaticConstantsPage"
 Title="Static Constants Page"
 Padding="{x:Static local:AppConstants.PagePadding}">
 <StackLayout>
 <Label Text="Hello, XAML!"
 TextColor="{x:Static local:AppConstants.BackgroundColor}"
 BackgroundColor="{x:Static local:AppConstants.ForegroundColor}"
 Font="{x:Static local:AppConstants.TitleFont}"
 HorizontalOptions="Center" />
 <BoxView WidthRequest="{x:Static sys:Math.PI}"
 HeightRequest="{x:Static sys:Math.E}"
 Color="{x:Static local:AppConstants.ForegroundColor}"
 HorizontalOptions="Center"
 VerticalOptions="CenterAndExpand"
 Scale="100" />
 </StackLayout>
</ContentPage>
Você precisará de declarações de namespace XML adicionais para acessar outras classes. Cada declaração de
namespace XML adicional define um novo prefixo. Para acessar classes locais para a biblioteca .NET Standard
de aplicativo compartilhado, como AppConstants , os programadores XAML geralmente usam o prefixo local .
A declaração de namespace deve indicar o nome do namespace CLR (Common Language Runtime), também
conhecido como o nome de namespace de .NET, que é o nome que aparece no c# namespace definição ou em
um using diretiva:
Você também pode definir as declarações de namespace XML para namespaces do .NET em qualquer assembly
que faz referência a biblioteca .NET Standard. Por exemplo, aqui está uma sys prefixo para o .NET standard 
System namespace, que está no mscorlib assembly, que representava uma vez "Microsoft Common Library do
objeto de tempo de execução", mas agora significa "Multilanguage padrão Objeto em tempo de execução
biblioteca comum." Como esse é outro assembly, você deve também especificar o nome do assembly, neste
caso mscorlib:
Observe que a palavra-chave clr-namespace é seguido por dois-pontos e, em seguida, o nome do namespace
.NET, seguido por um ponto e vírgula, a palavra-chave assembly , um sinal de igual e o nome do assembly.
Sim, seguido por dois pontos clr-namespace , mas o sinal de igual segue assembly . A sintaxe foi definida desta
maneira deliberadamente: declarações de namespace XML mais fazer referência a um URI que começa um
nome de esquema URI, como http , que é sempre seguido por dois-pontos. O clr-namespace parte dessa
cadeia de caracteres destina-se para simular que a convenção.
As duas declarações de namespace esses estão incluídas na StaticConstantsPage exemplo. Observe que o 
BoxView dimensões são definidas como Math.PI e Math.E , mas em escala por um fator de 100:
O tamanho do resultante BoxView em relação à tela é dependente de plataforma:
Outras extensões de marcação padrão
A extensão de marcação ConstraintExpression
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
 x:Class="XamlSamples.RelativeLayoutPage"
 Title="RelativeLayout Page">
 <RelativeLayout>
 <!-- Upper left -->
 <BoxView Color="Red"
 RelativeLayout.XConstraint=
 "{ConstraintExpression Type=Constant,
Várias extensões de marcação são intrínsecas para XAML e com suporte em arquivos XAML de xamarin. Forms.
Alguns deles não são usadas com muita frequência, mas são essenciais quando precisar delas:
Se uma propriedade tiver um não - null valor por padrão, mas você deseja defini-lo como null , defina-a
como o {x:Null} extensão de marcação.
Se uma propriedade é do tipo Type , você pode atribuí-la a um Type usando a extensão de marcação do
objeto