TouchBehavior
Le TouchBehavior
est Behavior
qui offre la possibilité d’interagir avec tous les VisualElement
en fonction d’événements tactiles, par clic de souris et pointage. L’implémentation de TouchBehavior
permet de personnaliser différentes propriétés visuelles du VisualElement
auquel il est attaché, comme BackgroundColor
, Opacity
, Rotation
, Scale
et bien d’autres.
Remarque
Le kit d’outils fournit également l’implémentation ImageTouchBehavior
qui étend TouchBehavior
en offrant la possibilité de personnaliser la Source
d’un élément Image
.
Important
Les comportements du Kit d’outils de la communauté .NET MAUI ne définissent pas le BindingContext
d’un comportement, car ces comportements peuvent être partagés et appliqués à plusieurs contrôles par l’intermédiaire de styles. Pour obtenir plus d’informations, voir Comportements MAUI .NET
Syntaxe
Les exemples suivants montrent comment ajouter TouchBehavior
à un HorizontalStackLayout
parent et comment effectuer les animations suivantes lorsqu’un utilisateur touche HorizontalStackLayout
ou l’un de ses enfants ou clique dessus :
- S’anime sur une période de 250 millisecondes
- applique le
CubicInOut
Easing
- Remplace
Opacity
par 0.6 - Remplace
Scale
par 0.8
XAML
Y compris l’espace de noms XAML
Pour utiliser le kit de ressources dans XAML, le xmlns
suivant doit être ajouté à votre page ou à votre affichage :
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
Il en résulte ce qui suit :
<ContentPage
x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
</ContentPage>
Serait modifié pour inclure le xmlns
de la manière suivante :
<ContentPage
x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
</ContentPage>
Utilisation du TouchBehavior
<ContentPage
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
x:Class="CommunityToolkit.Maui.Sample.Pages.Behaviors.TouchBehaviorPage">
<HorizontalStackLayout HorizontalOptions="Center" VerticalOptions="Center">
<HorizontalStackLayout.Behaviors>
<toolkit:TouchBehavior
DefaultAnimationDuration="250"
DefaultAnimationEasing="{x:Static Easing.CubicInOut}"
PressedOpacity="0.6"
PressedScale="0.8" />
</HorizontalStackLayout.Behaviors>
<ContentView
HeightRequest="100"
WidthRequest="10"
BackgroundColor="Gold" />
<Label Text="The entire layout receives touches" VerticalOptions="Center" LineBreakMode="TailTruncation"/>
<ContentView
HeightRequest="100"
WidthRequest="10"
BackgroundColor="Gold" />
</HorizontalStackLayout>
</ContentPage>
C#
Le TouchBehavior
peut être utilisé de la manière suivante dans C# :
class TouchBehaviorPage : ContentPage
{
public TouchBehaviorPage()
{
var firstContent = new ContentView
{
HeightRequest = 100,
WidthRequest = 10,
BackgroundColor = Colors.Gold
};
var label = new Label
{
Text = "The entire layout receives touches",
VerticalOptions = LayoutOptions.Center,
LineBreakMode = LineBreakMode.TailTruncation
};
var secondContent = new ContentView
{
HeightRequest = 100,
WidthRequest = 10,
BackgroundColor = Colors.Gold
};
var layout = new HorizontalStackLayout
{
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Center,
Children =
{
firstContent,
label,
secondContent
}
}
var touchBehavior = new TouchBehavior
{
DefaultAnimationDuration = 250,
DefaultAnimationEasing = Easing.CubicInOut,
PressedOpacity = 0.6,
PressedScale = 0.8
};
layout.Behaviors.Add(touchBehavior);
Content = layout;
}
}
Balisage C#
Notre package CommunityToolkit.Maui.Markup
permet d’utiliser ce Behavior
de manière beaucoup plus concise en C#.
using CommunityToolkit.Maui.Markup;
class TouchBehaviorPage : ContentPage
{
public TouchBehaviorPage()
{
Content = new HorizontalStackLayout
{
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Center,
Children =
{
new ContentView()
.Size(10, 100)
.BackgroundColor(Colors.Gold),
new Label
{
LineBreakMode = LineBreakMode.TailTruncation
}
.Text("The entire layout receives touches"
.CenterVertical(),
new ContentView()
.Size(10, 100)
.BackgroundColor(Colors.Gold)
}
}
.Behaviors(new TouchBehavior
{
DefaultAnimationDuration = 250,
DefaultAnimationEasing = Easing.CubicInOut,
PressedOpacity = 0.6,
PressedScale = 0.8
});
}
}
Exemples supplémentaires
Gestion de l’interaction par pointage
TouchBehavior
permet de personnaliser les propriétés du VisualElement
attaché selon que la souris pointe ou non sur l’élément.
L’exemple suivant montre comment attacher TouchBehavior
à HorizontalStackLayout
et comment modifier les propriétés BackgroundColor
et Scale
de HorizontalStackLayout
lorsqu’un utilisateur pointe le curseur de sa souris sur la disposition et tout élément enfant.
<HorizontalStackLayout
Padding="20"
Background="Black"
HorizontalOptions="Center">
<HorizontalStackLayout.Behaviors>
<toolkit:TouchBehavior
HoveredBackgroundColor="{StaticResource Gray900}"
HoveredScale="1.2" />
</HorizontalStackLayout.Behaviors>
</HorizontalStackLayout>
Gestion de l’interaction par appui long
TouchBehavior
permet de gérer les appuis de longue durée effectués par un utilisateur. Vous pouvez définir cette durée avec LongPressDuration
qui est exprimé en millisecondes.
L’exemple suivant montre comment ajouter TouchBehavior
à HorizontalStackLayout
, lier LongPressCommand
à IncreaseLongPressCountCommand
défini dans le modèle de vue de stockage et définir LongPressDuration
sur 750 millisecondes.
<HorizontalStackLayout
Padding="20"
Background="Black"
HorizontalOptions="Center"
x:Name="TouchableHorizontalStackLayout">
<HorizontalStackLayout.Behaviors>
<toolkit:TouchBehavior
BindingContext="{Binding Source={x:Reference Page}, Path=BindingContext, x:DataType=ContentPage}"
LongPressDuration="750"
LongPressCommand="{Binding Source={x:Reference Page}, Path=BindingContext.IncreaseLongPressCountCommand, x:DataType=ContentPage}"/>
</HorizontalStackLayout.Behaviors>
</HorizontalStackLayout>
Propriétés
Propriété | Type | Description |
---|---|---|
Commande | ICommand |
Obtient ou définit l’ICommand à appeler à l’issue d’un mouvement tactile de l’utilisateur. |
CommandParameter | object |
Obtient ou définit le paramètre à passer à la propriété Command . |
CurrentHoverState | HoverState |
Obtient ou définit le HoverState actuel du comportement. |
CurrentHoverStatus | HoverStatus |
Obtient ou définit le HoverStatus actuel du comportement. |
CurrentInteractionStatus | TouchInteractionStatus |
Obtient ou définit le TouchInteractionStatus actuel du comportement. |
CurrentTouchState | TouchState |
Obtient ou définit le TouchState actuel du comportement. |
CurrentTouchStatus | TouchStatus |
Obtient ou définit le TouchStatus actuel du comportement. |
DefaultAnimationDuration | int |
Obtient ou définit la durée de l’animation lorsque la propriété CurrentTouchState est TouchState.Default . |
DefaultAnimationEasing | Easing |
Obtient ou définit l’accélération de l’animation lorsque la propriété CurrentTouchState est TouchState.Default . |
DefaultBackgroundColor | Color |
Obtient ou définit la couleur d’arrière-plan de l’élément lorsque la propriété CurrentTouchState est TouchState.Default . |
DefaultOpacity | double |
Obtient ou définit l’opacité de l’élément lorsque la propriété CurrentTouchState est TouchState.Default . |
DefaultRotation | double |
Obtient ou définit la rotation autour des axes X et Y de l’élément lorsque la propriété CurrentTouchState est TouchState.Default . |
DefaultRotationX | double |
Obtient ou définit la rotation autour de l’axe X de l’élément lorsque la propriété CurrentTouchState est TouchState.Default . |
DefaultRotationY | double |
Obtient ou définit la rotation autour de l’axe Y de l’élément lorsque la propriété CurrentTouchState est TouchState.Default . |
DefaultScale | double |
Obtient ou définit l’échelle de l’élément lorsque la propriété CurrentTouchState est TouchState.Default . |
DefaultTranslationX | double |
Obtient ou définit la translation X de l’élément lorsque la propriété CurrentTouchState est TouchState.Default . |
DefaultTranslationY | double |
Obtient ou définit la translation Y de l’élément lorsque la propriété CurrentTouchState est TouchState.Default . |
DisallowTouchThreshold | int |
Obtient ou définit le seuil après lequel l’interaction tactile n’est pas autorisée. |
HoveredAnimationDuration | int |
Obtient ou définit la durée de l’animation lorsque la propriété CurrentHoverState est HoverState.Hovered . |
HoveredAnimationEasing | Easing |
Obtient ou définit l’accélération de l’animation lorsque la propriété CurrentHoverState est HoverState.Hovered . |
HoveredBackgroundColor | Color |
Obtient ou définit la couleur d’arrière-plan de l’élément lorsque la propriété CurrentHoverState est HoverState.Hovered . |
HoveredOpacity | double |
Obtient ou définit l’opacité de l’élément lorsque la propriété CurrentHoverState est HoverState.Hovered . |
HoveredRotation | double |
Obtient ou définit la rotation autour des axes X et Y de l’élément lorsque la propriété CurrentHoverState est HoverState.Hovered . |
HoveredRotationX | double |
Obtient ou définit la rotation autour de l’axe X de l’élément lorsque la propriété CurrentHoverState est HoverState.Hovered . |
HoveredRotationY | double |
Obtient ou définit la rotation autour de l’axe Y de l’élément lorsque la propriété CurrentHoverState est HoverState.Hovered . |
HoveredScale | double |
Obtient ou définit l’échelle de l’élément lorsque la propriété CurrentHoverState est HoverState.Hovered . |
HoveredTranslationX | double |
Obtient ou définit la translation X de l’élément lorsque la propriété CurrentHoverState est HoverState.Hovered . |
HoveredTranslationY | double |
Obtient ou définit la translation Y de l’élément lorsque la propriété CurrentHoverState est HoverState.Hovered . |
IsEnabled | bool |
Obtient ou définit une valeur indiquant si le comportement est activé. |
LongPressCommand | ICommand |
Obtient ou définit l’ICommand à appeler à l’issue d’un appui long de l’utilisateur. |
LongPressCommandParameter | object |
Obtient ou définit le paramètre à passer à la propriété LongPressCommand . |
LongPressDuration | int |
Obtient ou définit la durée en millisecondes requise pour déclencher le mouvement d’appui long. |
PressedAnimationDuration | int |
Obtient ou définit la durée de l’animation lorsque la propriété CurrentTouchState est TouchState.Pressed . |
PressedAnimationEasing | Easing |
Obtient ou définit l’accélération de l’animation lorsque la propriété CurrentTouchState est TouchState.Pressed . |
PressedBackgroundColor | Color |
Obtient ou définit la couleur d’arrière-plan de l’élément lorsque la propriété CurrentTouchState est TouchState.Pressed . |
PressedOpacity | double |
Obtient ou définit l’opacité de l’élément lorsque la propriété CurrentTouchState est TouchState.Pressed . |
PressedRotation | double |
Obtient ou définit la rotation autour des axes X et Y de l’élément lorsque la propriété CurrentTouchState est TouchState.Pressed . |
PressedRotationX | double |
Obtient ou définit la rotation autour de l’axe X de l’élément lorsque la propriété CurrentTouchState est TouchState.Pressed . |
PressedRotationY | double |
Obtient ou définit la rotation autour de l’axe Y de l’élément lorsque la propriété CurrentTouchState est TouchState.Pressed . |
PressedScale | double |
Obtient ou définit l’échelle de l’élément lorsque la propriété CurrentTouchState est TouchState.Pressed . |
PressedTranslationX | double |
Obtient ou définit la translation X de l’élément lorsque la propriété CurrentTouchState est TouchState.Pressed . |
PressedTranslationY | double |
Obtient ou définit la translation Y de l’élément lorsque la propriété CurrentTouchState est TouchState.Pressed . |
ShouldMakeChildrenInputTransparent | bool |
Obtient ou définit une valeur indiquant si les enfants de l’élément doivent être rendus transparents en entrée. |
Événements
Événement | Description |
---|---|
CurrentTouchStateChanged |
Se déclenche lorsque CurrentTouchState change. |
CurrentTouchStatusChanged |
Se déclenche lorsque CurrentTouchStatus change. |
HoverStateChanged |
Se déclenche lorsque CurrentHoverState change. |
HoverStatusChanged |
Se déclenche lorsque CurrentHoverStatus change. |
InteractionStatusChanged |
Se déclenche lorsque CurrentInteractionStatus change. |
LongPressCompleted |
Se déclenche à l’issue d’un mouvement d’appui long. |
TouchGestureCompleted |
Se déclenche à l’issue d’un mouvement tactile. |
Exemples
Vous trouverez un exemple de ce comportement en action dans l’Exemple d’application du kit de ressources de la communauté .NET MAUI.
API
Vous pouvez trouver le code source de TouchBehavior
sur le référentiel du kit de ressources de la communauté .NET MAUI sur GitHub.
Migration à partir de Xamarin Community Toolkit
Dans le Xamarin Community Toolkit, il existait le TouchEffect
si vous mettiez à niveau une application de Xamarin.Forms vers .NET MAUI. Il existe des changements cassants que vous devez savoir :
Modifications du nom de l’API
Nom dans Xamarin Community Toolkit | Nom dans Kit d’outils de la communauté .NET MAUI |
---|---|
TouchEffect | TouchBehavior |
NormalBackgroundColor | DefaultBackgroundColor |
NormalScale | DefaultScale |
NormalOpacity | DefaultOpacity |
NormalTranslationX | DefaultTranslationX |
NormalTranslationY | DefaultTranslationY |
NormalRotation | DefaultRotation |
NormalRotationX | DefaultRotationX |
NormalRotationY | DefaultRotationY |
NormalAnimationDuration | DefaultAnimationDuration |
NormalAnimationEasing | DefaultAnimationEasing |
NormalBackgroundImageSource | DefaultImageSource (déplacé vers ImageTouchBehavior ) |
NormalBackgroundImageAspect | DefaultImageAspect (déplacé vers ImageTouchBehavior ) |
TouchBehavior est désormais implémenté en tant que PlatformBehavior
Dans Xamarin Community Toolkit, le TouchEffect
a été implémenté en tant que AttachedEffect
. Pour utiliser l’effet, utilisez les propriétés jointes et appliquez-les à n’importe quel VisualElement
Dans .NET MAUI, le TouchBehavior
est implémenté sous forme de PlatformBehavior
qui est désormais appliqué à la collection de comportements d’éléments, consultez Comportements de plateforme pour obtenir plus d’informations.
Remarque : par défaut dans .NET MAUI, les
PlatformBehavior
ne sont pas définis sur la propriétéBindingContext
. Cela est dû au fait que les comportements peuvent être partagés dans des styles. LeTouchBehavior
définit la propriétéBindingContext
équivalente àVisualElement
auquel elle est appliquée. Cela signifie que vous ne devez pas partager leTouchBehavior
entre les éléments via des styles.
Voici un exemple de TouchEffect
appliqué à une vue dans Xamarin.Forms :
<StackLayout Orientation="Horizontal"
HorizontalOptions="CenterAndExpand"
xct:TouchEffect.AnimationDuration="250"
xct:TouchEffect.AnimationEasing="{x:Static Easing.CubicInOut}"
xct:TouchEffect.PressedScale="0.8"
xct:TouchEffect.PressedOpacity="0.6"
xct:TouchEffect.Command="{Binding Command}">
<BoxView Color="Gold" />
<Label Text="The entire layout receives touches" />
<BoxView Color="Gold"/>
</StackLayout>
L’équivalent TouchBehavior
dans .NET MAUI ressemblera à ceci :
<HorizontalStackLayout
HorizontalOptions="Center"
VerticalOptions="Center"
x:Name="TouchableHorizontalLayout">
<HorizontalStackLayout.Behaviors>
<toolkit:TouchBehavior
DefaultAnimationDuration="250"
DefaultAnimationEasing="{x:Static Easing.CubicInOut}"
PressedOpacity="0.6"
PressedScale="0.8"
BindingContext="{Binding Path=BindingContext, Source={x:Reference TouchableHorizontalLayout}, x:DataType=HorizontalStackLayout}"
Command="{Binding LayoutTappedCommand}" />
</HorizontalStackLayout.Behaviors>
<ContentView
BackgroundColor="Gold"
HeightRequest="100"
WidthRequest="10" />
<Label
LineBreakMode="TailTruncation"
Text="The entire layout receives touches"
VerticalOptions="Center" />
<ContentView
BackgroundColor="Gold"
HeightRequest="100"
WidthRequest="10" />
</HorizontalStackLayout>
.NET MAUI Community Toolkit