Xamarin.Forms 5.0 en approche !
Tags: xamarinforms, french, mobile
Published: 2020-10-26 16:38:15

---
title: Xamarin.Forms 5.0 en approche !
published: true
date: 2020-10-26 16:05:57 UTC
tags: XamarinForms,french,mobile
canonical_url: https://www.sylvainmoingeon.fr/xamarinforms-50-en-approche/
cover_image: https://dev-to-uploads.s3.amazonaws.com/i/rl8yjk76o2g3cicf2m84.png
---

Xamarin.Forms 5.0 pointe bientôt le bout de son nez et apporte son lot de nouveautés. Alors c'est vrai, pour la plupart il s'agit du passage en version stable de fonctionnalités qui étaient déjà disponibles en version expérimentale, mais c'est l'occasion d'en faire une récap et de prendre conscience des avancées qu'à fait Xamarin.Forms cette dernière année.

* * *

Pas d'article fleuve pour cette fois, je me contente de vous présenter quelques nouveautés et de transmettre quelques liens vers les ressources qui vous donneront toutes les informations.

La plupart des informations proviennent de la vidéo que vous trouverez en fin d'article et du post [Xamarin.Forms 5 preview](https://devblogs.microsoft.com/xamarin/xamarin-forms-5-preview/) de David Ortinau.

## Libère ta créativité avec les Brushes, Shapes et Paths 

L'un des derniers point faible de Xamarin.Forms vient de sauter !

Créer des formes vectorielles, des dégradés ou des chemins complexes ne nécessitent plus aucune bibliothèque tierce. Les éléments visuels peuvent être découpés selon n'importe quelle géométrie ouvrant la porte à des design modernes et bien léchés. Tout cela grâce aux [`Brush`](https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/brushes/), [`Shape`](https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/shapes/) et [`Path`](https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/shapes/path).

![Illustration d'interface utilisateur utilisant les brushes, shapes et paths](https://www.sylvainmoingeon.fr/media/posts/38/shapes-sxs.png)<figcaption>Avec les brushes, shapes et paths, créer des design léchés devient un jeu d'enfant !</figcaption>

## Templating, encore un pas de plus vers le "vrai" XAML de WPF 

Jusqu'à maintenant, on pouvait créer de nouveaux contrôles soit par composition de contrôles [Xamarin.Forms](https://www.sylvainmoingeon.fr/tags/xamarinforms/) existant soit en créant un nouveau contrôle de toute pièce de façon native, c'est-à-dire en codant à partir de zéro une version par plateforme ciblée.

La nouvelle version du `RadioButton` va plus loin et s'approche de ce que WPF propose puisqu'on peut désormais en modifier complètement le contenu à l'aide du templating.

Ça n'a l'air de rien dit comme ça, mais quand ce sera généralisé à tous les contrôles, ceux-ci pourront prendre n'importe quelle apparence sans toucher au code natif, sans recours à des custom renderers et donc sans besoin de créer de nouveaux contrôles. Cela représente donc une énorme partie du code spécifique aux plateformes qui disparaîtra au profit du code commun. Autant de temps de développement, de maintenance et de correction de bug en moins ! C'est un premier (grand) pas vers le [Xamarin.Forms](https://www.sylvainmoingeon.fr/tags/xamarinforms/) 100% cross-plateforme et donc vers [MAUI](https://devblogs.microsoft.com/dotnet/introducing-net-multi-platform-app-ui/).

![Illustration du templating sur un radioButton](https://www.sylvainmoingeon.fr/media/posts/38/radios-sxs.png)<figcaption>Templating sur un RadioButton</figcaption>

## Enfin un CarouselView pleinement fonctionnel et exploitable 

D'abord intégré en tant que type de Page puis transformé en Layout expérimental, le `CarouselView` atteint enfin l'âge de la maturité et dispose désormais de tout le nécessaire pour en faire un vrai contrôle utilisable en production : support du `VisualStateManager`, `IndicatorView` (par exemple, les petits points qui indiquent sur quel item on est dans la liste), `PeekAreaInsets` pour faire empiéter les items précédents et suivants sur l'item courant...

Je vous renvois à la [documentation sur le CarouselView](https://docs.microsoft.com/fr-fr/xamarin/xamarin-forms/user-interface/carouselview).

## Ça glisse avec le SwipeView 

Aussi incroyable que cela puisse paraître, [Xamarin.Forms](https://www.sylvainmoingeon.fr/tags/xamarinforms/) ne proposait encore aucune solution pour intégrer un mouvement de `Swipe` sur les items d'une liste. On trouvait bien ici ou là quelques implémentations de ce comportement, mais rien d'officiel ou de bien stable. Au point que j'avais fini par créer mon propre [composant SwipableView pour Xamarin.Forms](https://github.com/SylvainMoingeon/SwipableView) !

C'est désormais de l'histoire ancienne, bienvenue au `SwipeView`.

![Illustration animée du SwipeView Xamarin.Forms](https://www.sylvainmoingeon.fr/media/posts/38/favfighters.gif)<figcaption>SwipeView Xamarin.Forms</figcaption>

## Autres nouveautés et infos en vrac 

Vous trouverez dans Xamarin.Forms 5.0 un nouveau [gesture Drag and Drop](https://docs.microsoft.com/xamarin/xamarin-forms/app-fundamentals/gestures/drag-and-drop), principalement dédié au surface duo avec ses deux écrans. Mais bien entendu, rien ne vous empêche de l'utiliser au sein de vos applications.

Plusieurs contrôles ont migré dans le [Xamarin Community Toolkit](https://github.com/xamarin/XamarinCommunityToolkit), tels que `MediaElement` et `Expander`. Ceux-ci n'étaient pas encore prêts à passer en version finale dans Xamarin.Forms mais l'équipe souhaitait les faire sortir du statut expérimental. Ils sont donc disponibles dans le toolkit.

Un changement de version majeure s'accompagne souvent de "breaking changes", ici  notamment :

- MasterDetailPage et ses propriétés changent de nom suite aux polémiques récentes sur la connotation Maître/Esclave. On parlera désormais de `Flyout`.
- Côté Apple, `UIWebView` qui était déprécié a été complètement retirée

[Le changelog complet de Xamarin.Forms 5.0](https://docs.microsoft.com/fr-fr/xamarin/xamarin-forms/release-notes/5.0/5.0.0-pre3).

## David Ortinau et James Montemagno vous présente tout ça en vidéo 

Votre récompense pour être allé au bout de l'article :
{% youtube ttF80UnrJAg %}