Introducción
Xamarin.Forms añade una capa de abstracción sobre la capa de la interfaz de usuario permitiendo definir la misma una única vez siendo válida para todas las plataformas.

De la abstracción, en cada plataforma, se crean controles nativos. Es una de las características principales de Xamarin.Forms permitiendo crear apps con controles nativos con la apariencia nativa esperada en cada plataforma, etc. Con propiedades se pueden realizar personalizaciones, y para quien tenga conocimientos de desarrollo móvil nativo en cada plataforma puede llegar mucho más lejos usando Custom Renderers.
Mientras que contar con controles nativos, tiene puntos a favor:
- Rendimiento nativo.
- Aspecto nativo.
- Poder extender creando Custom Renderers con código nativo en cada plataforma.
Pero también alguno negativo:
- Hay que definir el control en cada plataforma.
- Los controles tienen apariencia nativa, no la misma. A veces se busca exactamente la misma apariencia y en alguna plataforma hay que añadir código específico para conseguir el resultado.
¿Y sí, pudiéramos elegir si usar un control nativo o un control dibujado?. De esta forma:
- Quien quiera usar el control nativo, puede.
- Quien tenga conocimiento de código nativo, puede usar el control nativo y extender usando Custom Renderers.
- Quien quiera exactamente misma apariencia pixel por pixel, puede usar un control dibujado de exactamente la misma forma en todas las plataformas.
- Quien quiera extender, y no tenga conocimientos de cada plataforma nativa, puede hacerlo con controles dibujados con una API común.
GraphicsControls
GraphicsControls es una librería experimental de controles dibujados para Xamarin.Forms. En cada plataforma se usan APIs de dibujado nativo:
- Android -Android Graphics
- iOS – CoreGraphics
- macOS – CoreGraphics
- UWP – Win2D
- Linux – Skia
- Tizen – Linux
El objetivo de la librería es ofrecer controles dibujados con soporte a Cupertino, Fluent y Material de todos los controles disponibles en Xamarin.Forms Visual (BoxView, Entry, Button, etc) en todas las plataformas actuales soportadas por Xamarin.Forms.
Controles dibujados
La librería cuenta con controles dibujados. Los controles reproducen la interfaz y comportamiento esperado usando Cupertino, Fluent y Material en todas las plataformas.
Fácil de extender
En cada control, se puede sobrecargar el dibujado del control o de una capa específica de cad control:
public override void Draw(ICanvas canvas, RectangleF dirtyRect)
{
}
Soporte a modo claro/oscuro
Todos los controles tienen soporte para el modo claro y oscuro:
Escritorio y móvil
Se busca dar soporte tanto en plataformas de escritorio como en móvil:

RTL
A pesar de ser controles dibujados, permitir usar los mismos ante cualquier situación es importante. Aspectos como soporte a RTL o accesibilidad es sumamente importante y se tiene en cuenta a la hora de crear los controles:
Accesibilidad
Los controles dibujados usando un Canvas donde dibujar todo el contenido, pero el Canvas se aloja en una vista nativa en cada plataforma. de momento solo se mapea la posibilidad de leer texto pero, de nuevo, a pesar de ser controles dibujados se busca dar el soporte necesario a nivel de accesibilidad.
¿Cuál es el objetivo?
El objetivo buscado es ofrecer una librería de controles dibujados con soporte a Cupertino, Fluent y Material en todas las plataformas soportadas por Xamarin.Forms. Cada control contará con las mismas propiedades y eventos de los controles disponibles en Xamarin.Forms.
Al tener completados todos los controles y dar soporte a todas las plataformas, se creará paquete NuGet.
Tras esto, el feedback e interés en la librería determinará la evolución.
¿Quieres saber más?. Recientemente, hice un streaming enseñando la librería:
Feedback
La librería usa una filosofía diferente a la habitual usada en Xamarin.Forms, controles dibujados en lugar de mapear a controles nativos. Puedes ayudar muchísimo a la evolución de la librería con tu feedback!. ¿Qué te parece la idea?. Recuerda, puedes dejar cualquier feedback en los comentarios de la entrada.

Más información
- Github: GraphicsControls
- YouTube: GraphicsControls: Drawn Controls for Xamarin.Forms