Introdução aos Xamarin.Forms estilos
Os estilos permitem que a aparência dos elementos visuais seja personalizada. Os estilos são definidos para um tipo específico e contêm valores para as propriedades disponíveis nesse tipo.
Xamarin.Forms Os aplicativos geralmente contêm vários controles que têm uma aparência idêntica. Por exemplo, um aplicativo pode ter várias Label
instâncias que têm as mesmas opções de fonte e opções de layout, conforme mostrado no exemplo de código XAML a seguir:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Styles.NoStylesPage"
Title="No Styles"
IconImageSource="xaml.png">
<ContentPage.Content>
<StackLayout Padding="0,20,0,0">
<Label Text="These labels"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand"
FontSize="Large" />
<Label Text="are not"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand"
FontSize="Large" />
<Label Text="using styles"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand"
FontSize="Large" />
</StackLayout>
</ContentPage.Content>
</ContentPage>
O exemplo de código a seguir mostra a página equivalente criada em C#:
public class NoStylesPageCS : ContentPage
{
public NoStylesPageCS ()
{
Title = "No Styles";
IconImageSource = "csharp.png";
Padding = new Thickness (0, 20, 0, 0);
Content = new StackLayout {
Children = {
new Label {
Text = "These labels",
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.CenterAndExpand,
FontSize = Device.GetNamedSize (NamedSize.Large, typeof(Label))
},
new Label {
Text = "are not",
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.CenterAndExpand,
FontSize = Device.GetNamedSize (NamedSize.Large, typeof(Label))
},
new Label {
Text = "using styles",
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.CenterAndExpand,
FontSize = Device.GetNamedSize (NamedSize.Large, typeof(Label))
}
}
};
}
}
Cada Label
instância tem valores de propriedade idênticos para controlar a aparência do texto exibido pelo Label
. Isso resulta na aparência mostrada nas capturas de tela seguir:
Definir a aparência de cada controle individual pode ser repetitivo e propenso a erros. Em vez disso, um estilo pode ser criado que define a aparência e, em seguida, aplicado aos controles necessários.
Criar um estilo
A classe Style
agrupa uma coleção de valores de propriedade em um objeto que pode ser aplicado a várias instâncias de elementos visuais. Isso ajuda a reduzir a marcação repetitiva e permite que a aparência de um aplicativo seja alterada com mais facilidade.
Embora os estilos tenham sido projetados principalmente para aplicativos baseados em XAML, eles também podem ser criados em C#:
Style
as instâncias criadas em XAML normalmente são definidas em umResourceDictionary
que é atribuído àResources
coleção de um controle, página ou àResources
coleção do aplicativo.Style
As instâncias criadas em C# normalmente são definidas na classe da página ou em uma classe que pode ser acessada globalmente.
Escolher em que local definir um Style
afeta o local em que ele pode ser usado:
Style
As instâncias definidas no nível de controle só podem ser aplicadas ao controle e a seus filhos.Style
As instâncias definidas no nível da página só podem ser aplicadas à página e a seus filhos.- As instâncias
Style
definidas no nível do aplicativo podem ser aplicadas em todo o aplicativo.
Cada instância de Style
contém uma coleção de um ou mais objetos Setter
, com cada Setter
tendo Property
e Value
. O Property
é o nome da propriedade vinculável do elemento ao qual o estilo é aplicado e o Value
é o valor aplicado à propriedade.
Cada Style
instância pode ser explícita ou implícita:
- Uma instância explícita
Style
é definida especificando aTargetType
e umx:Key
valor e definindo a propriedade doStyle
elemento de destino como ax:Key
referência. Para obter mais informações sobre estilos explícitos , consulte Estilos explícitos. - Uma instância implícita
Style
é definida especificando apenas umTargetType
. AStyle
instância será aplicada automaticamente a todos os elementos desse tipo. Observe que asTargetType
subclasses do não têm oStyle
aplicado automaticamente. Para obter mais informações sobre estilos implícitos , consulte Estilos implícitos.
Ao criar um Style
, a propriedade TargetType
é sempre necessária. O exemplo de código a seguir mostra um estilo explícito (observe o x:Key
) criado em XAML:
<Style x:Key="labelStyle" TargetType="Label">
<Setter Property="HorizontalOptions" Value="Center" />
<Setter Property="VerticalOptions" Value="CenterAndExpand" />
<Setter Property="FontSize" Value="Large" />
</Style>
Para aplicar um Style
, o objeto de destino deve ser um VisualElement
que corresponda ao TargetType
valor da propriedade do , conforme mostrado no exemplo de Style
código XAML a seguir:
<Label Text="Demonstrating an explicit style" Style="{StaticResource labelStyle}" />
Os estilos mais baixos na hierarquia de exibição têm precedência sobre aqueles definidos mais acima. Por exemplo, a configuração de um Style
estilo de Red
página definido Label.TextColor
como no nível do aplicativo será substituída por um estilo de nível de página definido Label.TextColor
como Green
. Da mesma forma, um estilo de nível de página será substituído por um estilo de nível de controle. Além disso, se Label.TextColor
for definido diretamente em uma propriedade de controle, isso terá precedência sobre todos os estilos.
Os artigos desta seção demonstram e explicam como criar e aplicar estilos explícitos e implícitos , como criar estilos globais, herança de estilo, como responder a alterações de estilo em tempo de execução e como usar os estilos embutidos incluídos no Xamarin.Forms.
Observação
O que é StyleId?
Antes da Xamarin.Forms versão 2.2, a StyleId
propriedade era usada para identificar elementos individuais em um aplicativo para identificação em testes de interface do usuário e em mecanismos de tema, como o Pixate. No entanto, Xamarin.Forms 2.2 introduziu a AutomationId
propriedade, que substituiu a StyleId
propriedade.