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.FormsPages, Layouts and Controls apresenta uma API comum para descrever interfaces de usuário móveis 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 à Xamarin.Forms representação), organiza-o 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 por meio da subclasse do PlatformEffect
controle e, em seguida, os efeitos são consumidos anexando-os a um controle apropriado em uma biblioteca .NET Standard ou em um projeto de Xamarin.Forms 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. Plataforma.iOS | UIView | UIView |
Android | Xamarin.Forms. Plataforma.Android | ViewGroup | Exibir |
Plataforma Universal do Windows (UWP) | Xamarin.Forms. Plataforma.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 o tratamento de exceções caso o efeito não possa ser aplicado ao controle especificado Xamarin.Forms .OnDetached
– chamado quando um efeito é separado 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 às alterações de propriedade associável no Xamarin.Forms controle. Uma verificação da propriedade alterada sempre deve ser feita, pois essa substituição pode ser chamada várias vezes.