Custom Renderer para Borda em Botão no Xamarin Forms

Disponível também em inglês

Quer colocar borda em um botão no Android usando Xamarin e não funciona nem a pau? Uma classe Custom Renderer é a solução.

Parece óbvio quando você já sabe como fazer.

Se você ainda tem que configurar Xamarin Forms na sua máquina veja meu outro POST:
Instalação e Configuração do Xamarin Forms no Visual Studio 2015

Eu estou usando o Xamarin Forms “portable” com XAML e Android API 23.

Custom Renderer para Borda em Botão no Xamarin Forms
 

O XAML abaixo não funciona no Android.

<Button Text="Click Me"
TextColor="Red"
BackgroundColor="White"
BorderColor="Red"
BorderWidth="1"
BorderRadius="3"
VerticalOptions="Center"
HorizontalOptions="Center">
</Button>

Para colocar borda em botão no Android é preciso criar uma classe Custom Renderer no projeto Droid:

using Xamarin.Forms.Platform.Android;
using Xamarin.Forms;

[assembly: ExportRenderer(typeof(Button), typeof(FSL.XF1.Droid.FlatButtonRenderer))]
namespace FSL.XF1.Droid
{
    public class FlatButtonRenderer : ButtonRenderer
    {
        protected override void OnDraw(Android.Graphics.Canvas canvas)
        {
            base.OnDraw(canvas);
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
        {
            base.OnElementChanged(e);
        }
    }
}

Com Custom Renderer:
Com Custom Renderer

Sem Custom Renderer:
Sem Custom Renderer

Parece simples certo? O código diz ao Xamarin Forms para renderizar todos os botões usando o comportamento nativo do Android e não o do Xamarin Forms. Com essa classe dá para customizar mais outras coisas além da borda.

Não é necessário criar um custom renderer para iOS.

Simples? Agora vamos para o próximo problema… 🙂

Bom é isso. Esperto que tenha ajudado.

Abaixo encontrará alguns links úteis.

Custom Renderer para borda em botão no Xamarin Forms

Custom Renderer: Perguntas, sugestões ou críticas são bem vindas. Boa sorte!

Faça download completo do código fonte no github.
Sobre o Autor:
Trabalha como arquiteto de soluções e desenvolvedor, tem mais de 16 anos de experiência em desenvolvimento de software em diversas plataformas sendo mais de 14 anos somente para o mercado de seguros.