Dot.Blog

C#, XAML, WinUI, WPF, Android, MAUI, IoT, IA, ChatGPT, Prompt Engineering

Drag and Drop sous MAUI

Dans cet article, nous allons explorer comment tirer parti de la fonctionnalité de Drag and Drop sous .NET MAUI pour créer des interfaces utilisateur plus intuitives et interactives, que ce soit pour des applications mobiles ou de bureau.

Introduction

La reconnaissance des gestes est essentielle dans la création d'une expérience utilisateur (UX) fluide et intuitive. Que ce soit sur un appareil mobile ou sur un ordinateur, l'interaction par gestes permet aux utilisateurs de naviguer et de manipuler des éléments de manière naturelle et efficace. Parmi les gestes couramment utilisés, le clic est sans doute le plus répandu, mais d'autres, comme le glisser-déposer (Drag and Drop), offrent des possibilités d'interaction riches et dynamiques.

Le Drag and Drop peut sembler complexe à implémenter, mais sous .NET MAUI, il s'avère être un outil puissant et facile à mettre en œuvre pour enrichir vos interfaces. Cet article vous guidera à travers les bases de cette fonctionnalité et vous montrera comment l'intégrer dans vos projets.

Les gestures de MAUI pour le Drag and Drop

.NET MAUI offre une gamme de gestures permettant de gérer les interactions par gestes, dont le Drag and Drop. Ces gestures sont cruciales pour capturer et interpréter les mouvements de l'utilisateur, que ce soit avec une souris, un écran tactile, ou un autre périphérique d'entrée.

Pour le Drag and Drop, MAUI met à disposition deux recognizers principaux :

  • DragGestureRecognizer : Permet de détecter le début d'une opération de glissement (drag) sur un élément.
  • DropGestureRecognizer : Détecte lorsqu'un élément est déposé sur une cible (drop).

Ces recognizers sont facilement configurables via XAML ou en code C#, et permettent de contrôler précisément les actions à entreprendre lors de ces interactions.

Description des gestures de Drag and Drop

DragGestureRecognizer

Le DragGestureRecognizer est utilisé pour indiquer qu'un élément peut être glissé. Voici quelques propriétés et événements importants :

  • CanDrag : Détermine si l'élément peut être déplacé. Il s'agit d'une propriété booléenne.
  • DragStarting : Un événement déclenché au début de l'opération de glissement. Il permet de préparer les données à être transportées lors du Drag and Drop.

DropGestureRecognizer

Le DropGestureRecognizer gère la réception des éléments glissés. Voici ses propriétés clés :

  • AllowDrop : Indique si l'élément peut recevoir des éléments déposés. Cette propriété est également booléenne.
  • Drop : Un événement qui se déclenche lorsque l'élément est déposé sur la cible. C'est ici que vous gérez la logique pour intégrer l'élément déplacé dans la cible.

Ces gestures permettent une personnalisation avancée des interactions Drag and Drop, vous donnant la possibilité de créer des comportements interactifs complexes de manière simple et efficace.

Implémentation du Drag and Drop avec du code XAML et C#

Voyons maintenant comment mettre en œuvre le Drag and Drop dans une application .NET MAUI avec un exemple pratique.

Mais pour commencer, regardez cette animation de l'exemple en cours d'exécution, vous comprendrez plus facilement où je veux en venir :

Code XAML

Voici un exemple de mise en œuvre dans un fichier MainPage.xaml :

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="DragDrop.MainPage">

    <Grid RowDefinitions="*,*" >
        <Frame Grid.Row="0">
            <Frame.GestureRecognizers>
                <DropGestureRecognizer AllowDrop="True" Drop="DropGestureRecognizer_Drop" />
            </Frame.GestureRecognizers>
            <VerticalStackLayout>
                <Label Text="Drop here" VerticalOptions="Center" FontSize="Small" TextColor="Green"/>
            </VerticalStackLayout>
        </Frame>
        <Frame Grid.Row="1">
            <VerticalStackLayout>
                <Label Text="Drag me 1" VerticalOptions="Center">
                    <Label.GestureRecognizers>
                        <DragGestureRecognizer CanDrag="True"
                      DragStarting="DragGestureRecognizer_DragStarting" />
                    </Label.GestureRecognizers>
                </Label>
                <Label Text="Drag me 2" VerticalOptions="Center">
                    <Label.GestureRecognizers>
                        <DragGestureRecognizer CanDrag="True"
                       DragStarting="DragGestureRecognizer_DragStarting" />
                    </Label.GestureRecognizers>
                </Label>
                <Label Text="Drag me 3" VerticalOptions="Center">
                    <Label.GestureRecognizers>
                        <DragGestureRecognizer CanDrag="True"
                      DragStarting="DragGestureRecognizer_DragStarting" />
                    </Label.GestureRecognizers>
                </Label>
            </VerticalStackLayout>
        </Frame>
    </Grid>
</ContentPage>

Code C#

Le fichier code-behind MainPage.xaml.cs gère la logique des événements :

namespace DragDrop
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void DropGestureRecognizer_Drop(object sender, DropEventArgs e)
        {
            var data = e.Data.Properties["Text"].ToString();
            var frame = (sender as Element)?.Parent as Frame;
            var list = (frame?.Content as VerticalStackLayout);
            list?.Children.Add(new Label
            {
                Text = data ?? string.Empty,
                TextColor = Colors.White
            });
        }

        private void DragGestureRecognizer_DragStarting(object sender, DragStartingEventArgs e)
        {
            var label = (sender as Element)?.Parent as Label;
            e.Data.Properties.Add("Text", label.Text);
        }
    }
}

Le code C# complète le comportement du Drag and Drop. Lorsqu'un label est glissé, l'événement DragStarting est déclenché pour préparer les données à transporter. Ensuite, lorsque le label est déposé sur la zone cible, l'événement Drop ajoute dynamiquement un nouveau label avec le texte glissé. Vous remarquerez que lorsque le drag débute, le texte qui est dans le label est extrait pour être utilisé comme indicateur lors du déplacement, de fait l'utilisateur voit le texte du label se déplacer, ce qui est plus ergonomique.

Ce simple exemple montre comment vous pouvez rapidement mettre en place une interaction Drag and Drop fonctionnelle sous .NET MAUI, créant ainsi des interfaces plus réactives et intuitives. Je ne vous avais pas menti, c'est vraiment simple, alors ne vous en privez pas !

Conclusion

L'intégration du Drag and Drop sous .NET MAUI est non seulement facile à implémenter, mais elle améliore considérablement l'expérience utilisateur en permettant des interactions plus naturelles et efficaces. Que ce soit pour des applications mobiles ou de bureau, cette fonctionnalité offre une flexibilité et une interactivité accrues pour vos projets.
Ne soyez pas timide, l'essayer c'est l'adopter et vos utilisateurs vont adorer !

Pour plus d'informations et des détails supplémentaires, consultez la documentation officielle sur MAUI.

Stay Tuned !

Faites des heureux, PARTAGEZ l'article !