TouchBehavior
TouchBehavior
è un oggetto Behavior
che consente di interagire con qualsiasi VisualElement
evento in base al tocco, al clic del mouse e al passaggio del mouse. L'implementazione TouchBehavior
consente di personalizzare molte proprietà visive diverse dell'oggetto VisualElement
a cui è associato, ad esempio BackgroundColor
, Rotation
Opacity
e Scale
, nonché molte altre proprietà.
Nota
Il toolkit fornisce anche l'implementazione ImageTouchBehavior
che estende questa TouchBehavior
funzionalità offrendo anche la possibilità di personalizzare l'oggetto Source
di un Image
elemento.
Importante
I comportamenti di .NET MAUI Community Toolkit non impostano l'oggetto BindingContext
di un comportamento, perché i comportamenti possono essere condivisi e applicati a più controlli tramite stili. Per altre informazioni, vedere Comportamenti MAUI di .NET
Sintassi
Gli esempi seguenti illustrano come aggiungere l'oggetto TouchBehavior
a un elemento padre HorizontalStackLayout
ed eseguire le animazioni seguenti quando un utente tocca o fa clic su HorizontalStackLayout
o su uno dei relativi elementi figlio:
- anima in un periodo di 250 millisecondi
- applica l'oggetto
CubicInOut
Easing
- modifica l'oggetto in
Opacity
0.6 - modifica l'oggetto in
Scale
0.8
XAML
Inclusione dello spazio dei nomi XAML
Per usare il toolkit in XAML, è necessario aggiungere le informazioni seguenti xmlns
nella pagina o nella visualizzazione:
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
Di conseguenza:
<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>
Verrà modificato in modo da includere l'oggetto xmlns
come indicato di seguito:
<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>
Uso di 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#
Può TouchBehavior
essere usato come indicato di seguito in 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;
}
}
C# Markup
Il CommunityToolkit.Maui.Markup
pacchetto offre un modo molto più conciso per usarlo Behavior
in 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
});
}
}
Esempi aggiuntivi
Gestione dell'interazione al passaggio del mouse
TouchBehavior
Offre la possibilità di personalizzare le proprietà dell'oggetto associato VisualElement
in base al fatto che il puntatore del mouse si posiziona sull'elemento.
Nell'esempio seguente viene illustrato come collegare l'oggetto TouchBehavior
a un HorizontalStackLayout
oggetto e modificare e BackgroundColor
Scale
di HorizontalStackLayout
quando un utente passa il puntatore del mouse sul layout e su qualsiasi elemento figlio.
<HorizontalStackLayout
Padding="20"
Background="Black"
HorizontalOptions="Center">
<HorizontalStackLayout.Behaviors>
<toolkit:TouchBehavior
HoveredBackgroundColor="{StaticResource Gray900}"
HoveredScale="1.2" />
</HorizontalStackLayout.Behaviors>
</HorizontalStackLayout>
Gestione dell'interazione con pressione prolungata
TouchBehavior
offre la possibilità di gestire lo scenario quando un utente preme per un lungo periodo di tempo. Questo periodo di tempo può essere definito da , LongPressDuration
espresso in unità di millisecondi.
Nell'esempio TouchBehavior
seguente viene illustrato come aggiungere a un HorizontalStackLayout
oggetto , associare l'oggetto LongPressCommand
all'oggetto IncreaseLongPressCountCommand
definito nel modello di visualizzazione di backup e impostare su LongPressDuration
750 millisecondi.
<HorizontalStackLayout
Padding="20"
Background="Black"
HorizontalOptions="Center">
<HorizontalStackLayout.Behaviors>
<toolkit:TouchBehavior
LongPressDuration="750"
LongPressCommand="{Binding Source={x:Reference Page}, Path=BindingContext.IncreaseLongPressCountCommand}"/>
</HorizontalStackLayout.Behaviors>
</HorizontalStackLayout>
Proprietà
Proprietà | Type | Descrizione |
---|---|---|
Comando | ICommand |
Ottiene o imposta l'oggetto ICommand da richiamare quando l'utente ha completato un movimento di tocco. |
CommandParameter | object |
Ottiene o imposta il parametro da passare alla Command proprietà . |
CurrentHoverState | HoverState |
Ottiene o imposta l'oggetto corrente HoverState del comportamento. |
CurrentHoverStatus | HoverStatus |
Ottiene o imposta l'oggetto corrente HoverStatus del comportamento. |
CurrentInteractionStatus | TouchInteractionStatus |
Ottiene o imposta l'oggetto corrente TouchInteractionStatus del comportamento. |
CurrentTouchState | TouchState |
Ottiene o imposta l'oggetto corrente TouchState del comportamento. |
CurrentTouchStatus | TouchStatus |
Ottiene o imposta l'oggetto corrente TouchStatus del comportamento. |
DefaultAnimationDuration | int |
Ottiene o imposta la durata dell'animazione quando la CurrentTouchState proprietà è TouchState.Default . |
DefaultAnimationEasing | Easing |
Ottiene o imposta l'interpolazione dell'animazione quando la CurrentTouchState proprietà è TouchState.Default . |
DefaultBackgroundColor | Color |
Ottiene o imposta il colore di sfondo dell'elemento quando la CurrentTouchState proprietà è TouchState.Default . |
DefaultOpacity | double |
Ottiene o imposta l'opacità dell'elemento quando la CurrentTouchState proprietà è TouchState.Default . |
DefaultRotation | double |
Ottiene o imposta la rotazione intorno agli assi X e Y dell'elemento quando la CurrentTouchState proprietà è TouchState.Default . |
DefaultRotationX | double |
Ottiene o imposta la rotazione attorno all'asse X dell'elemento quando la CurrentTouchState proprietà è TouchState.Default . |
DefaultRotationY | double |
Ottiene o imposta la rotazione attorno all'asse Y dell'elemento quando la CurrentTouchState proprietà è TouchState.Default . |
DefaultScale | double |
Ottiene o imposta la scala dell'elemento quando la CurrentTouchState proprietà è TouchState.Default . |
DefaultTranslationX | double |
Ottiene o imposta la conversione X dell'elemento quando la CurrentTouchState proprietà è TouchState.Default . |
DefaultTranslationY | double |
Ottiene o imposta la conversione Y dell'elemento quando la CurrentTouchState proprietà è TouchState.Default . |
DisallowTouchThreshold | int |
Ottiene o imposta la soglia per impedire il tocco. |
HoveredAnimationDuration | int |
Ottiene o imposta la durata dell'animazione quando la CurrentHoverState proprietà è HoverState.Hovered . |
HoveredAnimationEasing | Easing |
Ottiene o imposta l'interpolazione dell'animazione quando la CurrentHoverState proprietà è HoverState.Hovered . |
HoveredBackgroundColor | Color |
Ottiene o imposta il colore di sfondo dell'elemento quando la CurrentHoverState proprietà è HoverState.Hovered . |
HoveredOpacity | double |
Ottiene o imposta l'opacità dell'elemento quando la CurrentHoverState proprietà è HoverState.Hovered . |
HoveredRotation | double |
Ottiene o imposta la rotazione intorno agli assi X e Y dell'elemento quando la CurrentHoverState proprietà è HoverState.Hovered . |
HoveredRotationX | double |
Ottiene o imposta la rotazione attorno all'asse X dell'elemento quando la CurrentHoverState proprietà è HoverState.Hovered . |
HoveredRotationY | double |
Ottiene o imposta la rotazione attorno all'asse Y dell'elemento quando la CurrentHoverState proprietà è HoverState.Hovered . |
HoveredScale | double |
Ottiene o imposta la scala dell'elemento quando la CurrentHoverState proprietà è HoverState.Hovered . |
HoveredTranslationX | double |
Ottiene o imposta la conversione X dell'elemento quando la CurrentHoverState proprietà è HoverState.Hovered . |
HoveredTranslationY | double |
Ottiene o imposta la conversione Y dell'elemento quando la CurrentHoverState proprietà è HoverState.Hovered . |
IsEnabled | bool |
Ottiene o imposta un valore che indica se il comportamento è abilitato. |
LongPressCommand | ICommand |
Ottiene o imposta l'oggetto ICommand da richiamare quando l'utente ha completato una pressione lunga. |
LongPressCommandParameter | object |
Ottiene o imposta il parametro da passare alla LongPressCommand proprietà . |
LongPressDuration | int |
Ottiene o imposta la durata in millisecondi necessaria per attivare il movimento di pressione prolungata. |
PressedAnimationDuration | int |
Ottiene o imposta la durata dell'animazione quando la CurrentTouchState proprietà è TouchState.Pressed . |
PressedAnimationEasing | Easing |
Ottiene o imposta l'interpolazione dell'animazione quando la CurrentTouchState proprietà è TouchState.Pressed . |
PressedBackgroundColor | Color |
Ottiene o imposta il colore di sfondo dell'elemento quando la CurrentTouchState proprietà è TouchState.Pressed . |
PressedOpacity | double |
Ottiene o imposta l'opacità dell'elemento quando la CurrentTouchState proprietà è TouchState.Pressed . |
PressedRotation | double |
Ottiene o imposta la rotazione intorno agli assi X e Y dell'elemento quando la CurrentTouchState proprietà è TouchState.Pressed . |
PressedRotationX | double |
Ottiene o imposta la rotazione attorno all'asse X dell'elemento quando la CurrentTouchState proprietà è TouchState.Pressed . |
PressedRotationY | double |
Ottiene o imposta la rotazione attorno all'asse Y dell'elemento quando la CurrentTouchState proprietà è TouchState.Pressed . |
PressedScale | double |
Ottiene o imposta la scala dell'elemento quando la CurrentTouchState proprietà è TouchState.Pressed . |
PressedTranslationX | double |
Ottiene o imposta la conversione X dell'elemento quando la CurrentTouchState proprietà è TouchState.Pressed . |
PressedTranslationY | double |
Ottiene o imposta la conversione Y dell'elemento quando la CurrentTouchState proprietà è TouchState.Pressed . |
ShouldMakeChildrenInputTransparent | bool |
Ottiene o imposta un valore che indica se gli elementi figlio dell'elemento devono essere resi trasparenti per l'input. |
Eventi
Evento | Descrizione |
---|---|
CurrentTouchStateChanged |
Viene generato quando CurrentTouchState cambia. |
CurrentTouchStatusChanged |
Viene generato quando CurrentTouchStatus cambia. |
HoverStateChanged |
Viene generato quando CurrentHoverState cambia. |
HoverStatusChanged |
Viene generato quando CurrentHoverStatus cambia. |
InteractionStatusChanged |
Viene generato quando CurrentInteractionStatus cambia. |
LongPressCompleted |
Viene generato quando un movimento di pressione lungo è stato completato. |
TouchGestureCompleted |
Viene generato quando un movimento di tocco è stato completato. |
Esempi
È possibile trovare un esempio di questo comportamento in azione nell'applicazione di esempio .NET MAUI Community Toolkit.
API
È possibile trovare il codice sorgente per TouchBehavior
over nel repository GitHub di .NET MAUI Community Toolkit.
Migrazione da Xamarin Community Toolkit
In Xamarin Community Toolkit è presente TouchEffect
se si esegue l'aggiornamento di un'app da Xamarin.Forms a .NET MAUI sono state apportate alcune modifiche di rilievo che è necessario tenere presente:
Modifiche al nome dell'API
Nome in Xamarin Community Toolkit | Nome in MAUI Community Toolkit |
---|---|
TouchEffect | TouchBehavior |
NormalBackgroundColor | DefaultBackgroundColor |
NormalScale | DefaultScale |
NormalOpacity | DefaultOpacity |
NormalTranslationX | DefaultTranslationX |
NormalTranslationY | DefaultTranslationY |
NormalRotation | DefaultRotation |
NormalRotationX | DefaultRotationX |
NormalRotationY | DefaultRotationY |
NormalAnimationDuration | DefaultAnimationDuration |
NormalAnimationEasing | DefaultAnimationEasing |
NormalBackgroundImageSource | DefaultImageSource (spostato in ImageTouchBehavior ) |
NormalBackgroundImageAspect | DefaultImageAspect (spostato in ImageTouchBehavior ) |
TouchBehavior è ora implementato come PlatformBehavior
In Xamarin Community Toolkit è TouchEffect
stato implementato come AttachedEffect
. Per usare l'effetto si userebbero le proprietà associate e si applicano a qualsiasi VisualElement
In .NET MAUI TouchBehavior
viene implementato come che PlatformBehavior
viene ora applicato alla raccolta di comportamenti degli elementi, vedere Comportamenti della piattaforma per altre informazioni.
Nota: per impostazione predefinita in .NET MAUI
PlatformBehavior
s non imposta laBindingContext
proprietà , perché i comportamenti possono essere condivisi negli stili. L'oggettoTouchBehavior
imposta laBindingContext
proprietà uguale all'oggettoVisualElement
a cui viene applicato. Ciò significa che non è consigliabile condividere tra gliTouchBehavior
elementi tramite stili.
Di seguito è riportato un esempio di applicazione TouchEffect
a una vista in 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'equivalente TouchBehavior
in .NET MAUI sarà simile al seguente:
<HorizontalStackLayout HorizontalOptions="Center" VerticalOptions="Center">
<HorizontalStackLayout.Behaviors>
<toolkit:TouchBehavior
DefaultAnimationDuration="250"
DefaultAnimationEasing="{x:Static Easing.CubicInOut}"
PressedOpacity="0.6"
PressedScale="0.8"
Command="{Binding Command}" />
</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