Xamarin.Forms SwipeView
Le SwipeView
est un contrôle conteneur qui encapsule un élément de contenu et fournit des éléments de menu contextuel qui sont révélés par un mouvement de balayage :
SwipeView
définit les propriétés suivantes :
LeftItems
, de typeSwipeItems
, qui représente les éléments de balayage qui peuvent être appelés lorsque le contrôle est balayé à partir du côté gauche.RightItems
, de typeSwipeItems
, qui représente les éléments de balayage qui peuvent être appelés lorsque le contrôle est balayé à partir du côté droit.TopItems
, de typeSwipeItems
, qui représente les éléments de balayage qui peuvent être appelés lorsque le contrôle est balayé du haut vers le bas.BottomItems
, de typeSwipeItems
, qui représente les éléments de balayage qui peuvent être appelés lorsque le contrôle est balayé du bas vers le haut.Threshold
, de typedouble
, qui représente le nombre d’unités indépendantes de l’appareil qui déclenchent un mouvement de balayage pour révéler entièrement les éléments de balayage.
Ces propriétés sont adossées à BindableProperty
des objets, ce qui signifie qu’elles peuvent être des cibles de liaisons de données et mises en forme.
En outre, hérite de SwipeView
la Content
propriété de la ContentView
classe . La Content
propriété est la propriété content de la SwipeView
classe et n’a donc pas besoin d’être définie explicitement.
La SwipeView
classe définit également trois événements :
SwipeStarted
est déclenché lorsqu’un balayage démarre. L’objetSwipeStartedEventArgs
qui accompagne cet événement a uneSwipeDirection
propriété de typeSwipeDirection
.SwipeChanging
est déclenché à mesure que le mouvement de balayage se déplace. L’objetSwipeChangingEventArgs
qui accompagne cet événement a uneSwipeDirection
propriété de typeSwipeDirection
et uneOffset
propriété de typedouble
.SwipeEnded
est déclenché lorsqu’un balayage se termine. L’objetSwipeEndedEventArgs
qui accompagne cet événement a uneSwipeDirection
propriété de typeSwipeDirection
et uneIsOpen
propriété de typebool
.
En outre, SwipeView
inclut les Open
méthodes et Close
, qui ouvrent et ferment par programmation les éléments de balayage, respectivement.
Notes
SwipeView
a une plateforme spécifique sur iOS et Android, qui contrôle la transition utilisée lors de l’ouverture d’un SwipeView
. Pour plus d’informations, consultez Mode de transition swipeView sur iOS et Mode de transition swipeView sur Android.
Créer un SwipeView
un SwipeView
doit définir le contenu que le SwipeView
entoure et les éléments de balayage qui sont révélés par le mouvement de balayage. Les éléments de balayage sont un ou plusieurs SwipeItem
objets placés dans l’une des quatre SwipeView
collections directionnelles : LeftItems
, RightItems
, TopItems
ou BottomItems
.
L’exemple suivant montre comment instancier un SwipeView
en XAML :
<SwipeView>
<SwipeView.LeftItems>
<SwipeItems>
<SwipeItem Text="Favorite"
IconImageSource="favorite.png"
BackgroundColor="LightGreen"
Invoked="OnFavoriteSwipeItemInvoked" />
<SwipeItem Text="Delete"
IconImageSource="delete.png"
BackgroundColor="LightPink"
Invoked="OnDeleteSwipeItemInvoked" />
</SwipeItems>
</SwipeView.LeftItems>
<!-- Content -->
<Grid HeightRequest="60"
WidthRequest="300"
BackgroundColor="LightGray">
<Label Text="Swipe right"
HorizontalOptions="Center"
VerticalOptions="Center" />
</Grid>
</SwipeView>
Le code C# équivalent est :
// SwipeItems
SwipeItem favoriteSwipeItem = new SwipeItem
{
Text = "Favorite",
IconImageSource = "favorite.png",
BackgroundColor = Color.LightGreen
};
favoriteSwipeItem.Invoked += OnFavoriteSwipeItemInvoked;
SwipeItem deleteSwipeItem = new SwipeItem
{
Text = "Delete",
IconImageSource = "delete.png",
BackgroundColor = Color.LightPink
};
deleteSwipeItem.Invoked += OnDeleteSwipeItemInvoked;
List<SwipeItem> swipeItems = new List<SwipeItem>() { favoriteSwipeItem, deleteSwipeItem };
// SwipeView content
Grid grid = new Grid
{
HeightRequest = 60,
WidthRequest = 300,
BackgroundColor = Color.LightGray
};
grid.Children.Add(new Label
{
Text = "Swipe right",
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Center
});
SwipeView swipeView = new SwipeView
{
LeftItems = new SwipeItems(swipeItems),
Content = grid
};
Dans cet exemple, le SwipeView
contenu est un Grid
qui contient un Label
:
Les éléments de balayage sont utilisés pour effectuer des actions sur le SwipeView
contenu et sont révélés lorsque le contrôle est balayé à partir du côté gauche :
Par défaut, un élément de balayage est exécuté lorsqu’il est appuyé par l’utilisateur. Vous pouvez cependant changer ce comportement. Pour plus d’informations, consultez Mode de balayage.
Une fois qu’un élément de balayage a été exécuté, les éléments de balayage sont masqués et le SwipeView
contenu est réexpliqué. Vous pouvez cependant changer ce comportement. Pour plus d’informations, consultez Comportement de balayage.
Notes
Le contenu de balayage et les éléments de balayage peuvent être placés en ligne ou définis en tant que ressources.
Éléments de balayage
Les LeftItems
collections , RightItems
, TopItems
et BottomItems
sont toutes de type SwipeItems
. La SwipeItems
classe définit les propriétés suivantes :
Mode
, de typeSwipeMode
, qui indique l’effet d’une interaction de balayage. Pour plus d’informations sur le mode de balayage, consultez Mode de balayage.SwipeBehaviorOnInvoked
, de typeSwipeBehaviorOnInvoked
, qui indique comment unSwipeView
se comporte après l’appel d’un élément de balayage. Pour plus d’informations sur le comportement du balayage, consultez Comportement de balayage.
Ces propriétés sont adossées à BindableProperty
des objets, ce qui signifie qu’elles peuvent être des cibles de liaisons de données et mises en forme.
Chaque élément de balayage est défini comme un SwipeItem
objet placé dans l’une des quatre SwipeItems
collections directionnelles. La SwipeItem
classe dérive de la MenuItem
classe et ajoute les membres suivants :
- Propriété
BackgroundColor
, de typeColor
, qui définit la couleur d’arrière-plan de l’élément de balayage. Cette propriété est adossée à une propriété pouvant être liée. - Événement
Invoked
, qui est déclenché lorsque l’élément de balayage est exécuté.
Important
La MenuItem
classe définit plusieurs propriétés, notamment Command
, CommandParameter
, IconImageSource
et Text
. Ces propriétés peuvent être définies sur un SwipeItem
objet pour définir son apparence et pour définir un ICommand
qui s’exécute lorsque l’élément de balayage est appelé. Pour plus d’informations, consultez Xamarin.Forms MenuItem.
L’exemple suivant montre deux SwipeItem
objets dans la LeftItems
collection d’un SwipeView
:
<SwipeView>
<SwipeView.LeftItems>
<SwipeItems>
<SwipeItem Text="Favorite"
IconImageSource="favorite.png"
BackgroundColor="LightGreen"
Invoked="OnFavoriteSwipeItemInvoked" />
<SwipeItem Text="Delete"
IconImageSource="delete.png"
BackgroundColor="LightPink"
Invoked="OnDeleteSwipeItemInvoked" />
</SwipeItems>
</SwipeView.LeftItems>
<!-- Content -->
</SwipeView>
L’apparence de chaque SwipeItem
est définie par une combinaison des Text
propriétés , IconImageSource
et BackgroundColor
:
Lorsqu’un SwipeItem
est appuyé, son Invoked
événement se déclenche et est géré par son gestionnaire d’événements inscrit. En outre, l’événement MenuItem.Clicked
se déclenche. Vous pouvez également définir la Command
propriété sur une ICommand
implémentation qui sera exécutée lorsque le SwipeItem
est appelé.
Notes
Lorsque l’apparence d’un SwipeItem
est définie uniquement à l’aide des Text
propriétés ou IconImageSource
, le contenu est toujours centré.
En plus de définir les éléments de balayage en tant qu’objets SwipeItem
, il est également possible de définir des affichages d’éléments de balayage personnalisés. Pour plus d’informations, consultez Éléments de balayage personnalisés.
Sens du balayage
SwipeView
prend en charge quatre directions de balayage différentes, la direction de balayage étant définie par la collection directionnelle SwipeItems
à laquelle les SwipeItem
objets sont ajoutés. Chaque direction de balayage peut contenir ses propres éléments de balayage. Par exemple, l’exemple suivant montre un SwipeView
dont les éléments de balayage dépendent de la direction du balayage :
<SwipeView>
<SwipeView.LeftItems>
<SwipeItems>
<SwipeItem Text="Delete"
IconImageSource="delete.png"
BackgroundColor="LightPink"
Command="{Binding DeleteCommand}" />
</SwipeItems>
</SwipeView.LeftItems>
<SwipeView.RightItems>
<SwipeItems>
<SwipeItem Text="Favorite"
IconImageSource="favorite.png"
BackgroundColor="LightGreen"
Command="{Binding FavoriteCommand}" />
<SwipeItem Text="Share"
IconImageSource="share.png"
BackgroundColor="LightYellow"
Command="{Binding ShareCommand}" />
</SwipeItems>
</SwipeView.RightItems>
<!-- Content -->
</SwipeView>
Dans cet exemple, le contenu peut être balayé vers la SwipeView
droite ou la gauche. Le balayage vers la droite affiche l’élément Supprimer le balayage, tandis que le balayage vers la gauche affiche les éléments de balayage Favoris et Partager .
Avertissement
Une seule instance d’une collection directionnelle SwipeItems
peut être définie à la fois sur un SwipeView
. Par conséquent, vous ne pouvez pas avoir deux LeftItems
définitions sur un SwipeView
.
Les SwipeStarted
événements , SwipeChanging
et SwipeEnded
signalent la direction du balayage via la SwipeDirection
propriété dans les arguments de l’événement. Cette propriété est de type SwipeDirection
, qui est une énumération composée de quatre membres :
Right
indique qu’un balayage vers la droite s’est produit.Left
indique qu’un balayage vers la gauche s’est produit.Up
indique qu’un balayage vers le haut s’est produit.Down
indique qu’un balayage vers le bas s’est produit.
Seuil de balayage
SwipeView
inclut une Threshold
propriété, de type double
, qui représente le nombre d’unités indépendantes de l’appareil qui déclenchent un mouvement de balayage pour révéler entièrement les éléments de balayage.
L’exemple suivant montre un SwipeView
qui définit la Threshold
propriété :
<SwipeView Threshold="200">
<SwipeView.LeftItems>
<SwipeItems>
<SwipeItem Text="Favorite"
IconImageSource="favorite.png"
BackgroundColor="LightGreen" />
</SwipeItems>
</SwipeView.LeftItems>
<!-- Content -->
</SwipeView>
Dans cet exemple, le SwipeView
doit être balayé pour 200 unités indépendantes de l’appareil avant que ne SwipeItem
soit entièrement révélé.
Notes
Actuellement, la Threshold
propriété est implémentée uniquement sur iOS et Android.
Mode balayage
La SwipeItems
classe a une Mode
propriété qui indique l’effet d’une interaction de balayage. Cette propriété doit être définie sur l’un des membres de l’énumération SwipeMode
:
Reveal
indique qu’un balayage révèle les éléments de balayage. C’est la valeur par défaut de la propriétéSwipeItems.Mode
.Execute
indique qu’un balayage exécute les éléments de balayage.
En mode d’affichage, l’utilisateur effectue un SwipeView
mouvement de balayage pour ouvrir un menu comprenant un ou plusieurs éléments de balayage, et doit appuyer explicitement sur un élément de balayage pour l’exécuter. Une fois l’élément de balayage exécuté, les éléments de balayage sont fermés et le SwipeView
contenu est réexpliqué. En mode d’exécution, l’utilisateur effectue un SwipeView
mouvement de balayage pour ouvrir un menu composé d’un autre élément de balayage, qui sont ensuite exécutés automatiquement. Après l’exécution, les éléments de balayage sont fermés et le SwipeView
contenu est ré-affiché.
L’exemple suivant montre un SwipeView
configuré pour utiliser le mode d’exécution :
<SwipeView>
<SwipeView.LeftItems>
<SwipeItems Mode="Execute">
<SwipeItem Text="Delete"
IconImageSource="delete.png"
BackgroundColor="LightPink"
Command="{Binding DeleteCommand}" />
</SwipeItems>
</SwipeView.LeftItems>
<!-- Content -->
</SwipeView>
Dans cet exemple, le SwipeView
contenu peut être balayé vers la droite pour afficher l’élément de balayage, qui est exécuté immédiatement. Après l’exécution, le SwipeView
contenu est ré-affiché.
Comportement du balayage
La SwipeItems
classe a une SwipeBehaviorOnInvoked
propriété, qui indique comment se comporte un SwipeView
après l’appel d’un élément de balayage. Cette propriété doit être définie sur l’un des membres d’énumération SwipeBehaviorOnInvoked
:
Auto
indique qu’en mode d’affichage, leSwipeView
se ferme après l’appel d’un élément de balayage, et qu’en mode d’exécution, leSwipeView
reste ouvert après l’appel d’un élément de balayage. C’est la valeur par défaut de la propriétéSwipeItems.SwipeBehaviorOnInvoked
.Close
indique que leSwipeView
se ferme après l’appel d’un élément de balayage.RemainOpen
indique que leSwipeView
reste ouvert après l’appel d’un élément de balayage.
L’exemple suivant montre un SwipeView
configuré pour rester ouvert après l’appel d’un élément de balayage :
<SwipeView>
<SwipeView.LeftItems>
<SwipeItems SwipeBehaviorOnInvoked="RemainOpen">
<SwipeItem Text="Favorite"
IconImageSource="favorite.png"
BackgroundColor="LightGreen"
Invoked="OnFavoriteSwipeItemInvoked" />
<SwipeItem Text="Delete"
IconImageSource="delete.png"
BackgroundColor="LightPink"
Invoked="OnDeleteSwipeItemInvoked" />
</SwipeItems>
</SwipeView.LeftItems>
<!-- Content -->
</SwipeView>
Éléments de balayage personnalisés
Les éléments de balayage personnalisés peuvent être définis avec le SwipeItemView
type . La SwipeItemView
classe dérive de la ContentView
classe et ajoute les propriétés suivantes :
Command
, de typeICommand
, qui est exécuté lorsqu’un élément de balayage est appuyé.CommandParameter
, de typeobject
: paramètre passé à la commandeCommand
.
Ces propriétés sont soutenues par BindableProperty
des objets, ce qui signifie qu’elles peuvent être des cibles de liaisons de données et stylées.
La SwipeItemView
classe définit également un Invoked
événement déclenché lorsque l’élément est appuyé, après l’exécution de Command
.
L’exemple suivant montre un SwipeItemView
objet dans la LeftItems
collection d’un SwipeView
:
<SwipeView>
<SwipeView.LeftItems>
<SwipeItems>
<SwipeItemView Command="{Binding CheckAnswerCommand}"
CommandParameter="{Binding Source={x:Reference resultEntry}, Path=Text}">
<StackLayout Margin="10"
WidthRequest="300">
<Entry x:Name="resultEntry"
Placeholder="Enter answer"
HorizontalOptions="CenterAndExpand" />
<Label Text="Check"
FontAttributes="Bold"
HorizontalOptions="Center" />
</StackLayout>
</SwipeItemView>
</SwipeItems>
</SwipeView.LeftItems>
<!-- Content -->
</SwipeView>
Dans cet exemple, le SwipeItemView
comprend un StackLayout
contenant un Entry
et un Label
. Une fois que l’utilisateur a entré une entrée dans , Entry
le reste du SwipeViewItem
peut être appuyé, ce qui exécute le ICommand
défini par la SwipeItemView.Command
propriété .
Ouvrir et fermer un SwipeView par programmation
SwipeView
inclut Open
et Close
les méthodes, qui ouvrent et ferment par programmation les éléments de balayage, respectivement. Par défaut, ces méthodes animent le lors de SwipeView
son ouverture ou de sa fermeture.
La Open
méthode nécessite un OpenSwipeItem
argument pour spécifier la direction à partir de laquelle sera SwipeView
ouvert. L’énumération OpenSwipeItem
a quatre membres :
LeftItems
, ce qui indique que leSwipeView
sera ouvert à partir de la gauche, pour afficher les éléments de balayage dans laLeftItems
collection.TopItems
, ce qui indique que leSwipeView
sera ouvert à partir du haut, pour révéler les éléments de balayage dans laTopItems
collection.RightItems
, ce qui indique que leSwipeView
sera ouvert à partir de la droite, pour afficher les éléments de balayage dans laRightItems
collection.BottomItems
, ce qui indique que leSwipeView
sera ouvert à partir du bas, pour révéler les éléments de balayage dans laBottomItems
collection.
En outre, la Open
méthode accepte également un argument facultatif bool
qui définit si le SwipeView
sera animé lorsqu’il s’ouvre.
Avec un SwipeView
nommé swipeView
, l’exemple suivant montre comment ouvrir un SwipeView
pour révéler les éléments de balayage dans la LeftItems
collection :
swipeView.Open(OpenSwipeItem.LeftItems);
Le swipeView
peut ensuite être fermé avec la Close
méthode :
swipeView.Close();
Notes
La Close
méthode accepte également un argument facultatif bool
qui définit si le SwipeView
sera animé lors de sa fermeture.
Désactiver un SwipeView
Une application peut entrer un état dans lequel le balayage d’un élément de contenu n’est pas une opération valide. Dans ce cas, SwipeView
le peut être désactivé en définissant sa IsEnabled
propriété sur false
. Cela empêchera les utilisateurs de balayer le contenu pour révéler les éléments de balayage.
En outre, lors de la définition de la Command
propriété d’un SwipeItem
ou SwipeItemView
, le CanExecute
délégué de peut ICommand
être spécifié pour activer ou désactiver l’élément de balayage.