Compartilhar via


Resumo do Capítulo 12. Estilos

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.

No Xamarin.Forms, os estilos permitem que vários modos de exibição compartilhem uma coleção de configurações de propriedade. Isso reduz a marcação e permite manter temas visuais consistentes.

Os estilos são quase sempre definidos e consumidos na marcação. Um objeto do tipo Style é instanciado em um dicionário de recursos e, em seguida, definido como a Style propriedade de um elemento visual usando uma StaticResource extensão ou DynamicResource marcação.

O estilo básico

A Style requer que ele TargetType seja definido para o tipo do objeto visual ao qual se aplica. Quando um Style é instanciado em um dicionário de recursos (como é comum), ele também requer um x:Key atributo.

O Style tem uma propriedade de conteúdo do tipo Setters, que é uma coleção de Setter objetos. Cada Setter um associa um Property a um Value.

Em XAML, a Property configuração é o nome de uma propriedade CLR (como a Text propriedade de ), mas a propriedade styled deve ser apoiada Buttonpor uma propriedade vinculável. Além disso, a propriedade deve ser definida na classe indicada pela TargetType configuração ou herdada por essa classe.

Você pode especificar a Value configuração usando o elemento <Setter.Value>de propriedade . Isso permite que você defina Value para um objeto que não pode ser expresso em uma cadeia de caracteres de texto, ou para um OnPlatform objeto, ou para um objeto instanciado usando x:Arguments ou x:FactoryMethod. A Value propriedade também pode ser definida com uma StaticResource expressão para outro item no dicionário.

O programa BasicStyle demonstra a sintaxe básica e mostra como fazer referência a Style com uma StaticResource extensão de marcação:

Captura de tela tripla de estilo básico

O Style objeto e qualquer objeto criado no Style objeto como uma Value configuração são compartilhados entre todos os modos de exibição que fazem referência a esse Style. O Style não pode conter nada que não possa ser compartilhado, como um View derivado.

Os manipuladores de eventos não podem ser definidos em um Stylearquivo . A GestureRecognizers propriedade não pode ser definida em um Style porque não é apoiada por uma propriedade vinculável.

Estilos no código

Embora não seja comum, você pode instanciar e inicializar Style objetos no código. Isso é demonstrado pelo exemplo BasicStyleCode.

Herança de estilo

Style tem uma BasedOn propriedade que você pode definir como uma StaticResource extensão de marcação fazendo referência a outro estilo. Isso permite que os estilos herdem de estilos anteriores e adicionem ou substituam configurações de propriedade. O exemplo StyleInheritance demonstra isso.

Se Style2 é baseado em Style1, o TargetType de Style2 deve ser o mesmo que Style1 ou derivado de Style1. O dicionário de recursos no qual Style1 está armazenado deve ser o mesmo dicionário Style2 de recursos ou um dicionário de recursos superior na árvore visual.

Estilos implícitos

Se um Style em um dicionário de recursos não tiver uma configuração de x:Key atributo, ele receberá uma chave de dicionário automaticamente e o Style objeto se tornará um estilo implícito. Um modo de exibição sem uma Style configuração e cujo tipo corresponde exatamente TargetType encontrará esse estilo, como demonstra o exemplo ImplicitStyle .

Um estilo implícito pode derivar de um Style com uma x:Key configuração, mas não o contrário. Não é possível fazer referência explícita a um estilo implícito.

Você pode implementar três tipos de hierarquia com estilos e BasedOn:

  • De estilos definidos no Application e Page até estilos definidos em layouts inferiores na árvore visual.
  • Desde estilos definidos para classes base, como VisualElement e View até estilos definidos para classes específicas.
  • De estilos com teclas de dicionário explícitas a estilos implícitos.

Essas hierarquias são demonstradas no exemplo StyleHierarchy .

Estilos dinâmicos

Um estilo em um dicionário de recursos pode ser referenciado por DynamicResource em vez de StaticResource. Isso torna o estilo um estilo dinâmico. Se esse estilo for substituído no dicionário de recursos por outro estilo com a mesma chave, as exibições que fazem referência a esse estilo serão DynamicResource alteradas automaticamente. Além disso, a ausência de uma entrada de dicionário com a chave especificada fará com que StaticResource gere uma exceção, mas não DynamicResource.

Você pode usar essa técnica para alterar dinamicamente o estilo ou os temas, como demonstra o exemplo DynamicStyles.

No entanto, você não pode definir a BasedOn propriedade como uma DynamicResource extensão de maquiagem porque BasedOn não é apoiada por uma propriedade vinculável. Para derivar um estilo dinamicamente, não defina BasedOn. Em vez disso, defina a BaseResourceKey propriedade como a chave de dicionário do estilo do qual você deseja derivar. O exemplo DynamicStylesInheritance demonstra essa técnica.

Estilos de dispositivo

A Device.Styles classe aninhada define doze campos estáticos somente leitura para seis estilos com um TargetType dos Label quais você pode usar para tipos comuns de usos de texto.

Seis desses campos são do tipo Style que você pode definir diretamente para uma Style propriedade no código:

Os outros seis campos são do tipo string e podem ser usados como chaves de dicionário para estilos dinâmicos:

Esses estilos são ilustrados pelo exemplo DeviceStylesList .