Partilhar via


Introdução aos efeitos

Efeitos permitem que os controles nativos em cada plataforma sejam personalizados e são geralmente usados para pequenas alterações de estilo. Este artigo fornece uma introdução aos efeitos, descreve o limite entre efeitos e renderizadores personalizados e descreve a classe PlatformEffect.

Xamarin.FormsPáginas, Layouts e Controles apresenta uma API comum para descrever interfaces de usuário móvel multiplataforma. Cada página, layout e controle são renderizados de forma diferente em cada plataforma usando uma Renderer classe que, por sua vez, cria um controle nativo (correspondente à representação), organiza-o Xamarin.Forms na tela e adiciona o comportamento especificado no código compartilhado.

Os desenvolvedores podem implementar suas próprias classes Renderer personalizadas para personalizar a aparência e/ou o comportamento de um controle. No entanto, implementar uma classe de renderizador personalizado para executar uma personalização de controle simples geralmente gera uma resposta pesada. Os efeitos simplificam esse processo, permitindo que os controles nativos em cada plataforma sejam personalizado mais facilmente.

Os efeitos são criados em projetos específicos da plataforma subclasse do PlatformEffect controle e, em seguida, os efeitos são consumidos anexando-os a um controle apropriado em uma Xamarin.Forms biblioteca .NET Standard ou projeto de Biblioteca Compartilhada.

Por que usar um efeito em vez de um renderizador personalizado?

Os efeitos simplificam a personalização de um controle, são reutilizáveis e podem ser parametrizados para aumentar ainda mais a reutilização.

Tudo que pode ser feito com um efeito também pode ser feito com um renderizador personalizado. No entanto, os renderizadores personalizados oferecem mais flexibilidade e personalização do que os efeitos. As diretrizes a seguir listam as circunstâncias nas quais você pode escolher um efeito em vez de um renderizador personalizado:

  • É recomendado usar um efeito quando alterar as propriedades de um controle específico da plataforma atinge o resultado desejado.
  • Um renderizador personalizado é necessário quando há necessidade de substituir os métodos por um controle específico da plataforma.
  • Um renderizador personalizado é necessário quando há a necessidade de substituir o controle específico da plataforma que implementa um Xamarin.Forms controle.

Criando subclasses da classe PlatformEffect

A tabela a seguir lista o namespace para a classe PlatformEffect em cada plataforma, bem como os tipos de suas propriedades:

Plataforma Namespace Contêiner Control
iOS Xamarin.Forms. Platform.iOS UIView UIView
Android Xamarin.Forms. Platform.Android ViewGroup Exibir
Plataforma Universal do Windows (UWP) Xamarin.Forms. Platform.UWP FrameworkElement FrameworkElement

Cada classe PlatformEffect específica da plataforma expõe as propriedades a seguir:

  • Container – faz referência ao controle específico da plataforma que está sendo usado para implementar o layout.
  • Control – faz referência ao controle específico da plataforma que está sendo usado para implementar o Xamarin.Forms controle.
  • Element – faz referência ao Xamarin.Forms controle que está sendo renderizado.

Os efeitos não têm informações de tipo sobre o contêiner, o controle ou o elemento a que estão anexados porque eles podem ser anexados a qualquer elemento. Portanto, quando um efeito é anexado a um elemento incompatível, ele deve ter o desempenho reduzido discretamente ou lançar uma exceção. No entanto, as propriedades Container, Control e Element podem ser convertidas em seu tipo de implementação. Para obter mais informações sobre esses tipos, confira Classes base do renderizador e controles nativos.

Cada classe PlatformEffect específica da plataforma expõe os métodos a seguir, que devem ser substituídos para implementar um efeito:

  • OnAttached – chamado quando um efeito é anexado a um Xamarin.Forms controle . Uma versão substituída desse método, em cada classe de efeito específica da plataforma, é o local para executar a personalização do controle, juntamente com a manipulação de exceção caso o efeito não possa ser aplicado ao controle especificado Xamarin.Forms .
  • OnDetached – chamado quando um efeito é desanexado de um Xamarin.Forms controle. Uma versão de substituição deste método, em cada classe de efeito específica da plataforma, é o lugar para executar qualquer limpeza de efeito, como cancelar o registro de um manipulador de eventos.

Além disso, o PlatformEffect expõe o método OnElementPropertyChanged, que também pode ser substituído. Esse método é chamado quando uma propriedade do elemento foi alterada. Uma versão substituída desse método, em cada classe de efeito específica da plataforma, é o local para responder a alterações de propriedade associáveis no Xamarin.Forms controle. Uma verificação da propriedade alterada sempre deve ser feita, pois essa substituição pode ser chamada várias vezes.