Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
TouchBehavior è un Behavior che consente di interagire con qualsiasi VisualElement basato su eventi di tocco, clic del mouse e passaggio del mouse. L'implementazione TouchBehavior consente di personalizzare molte proprietà visive diverse dell'oggetto VisualElement a cui è associato, ad esempio BackgroundColor, OpacityRotatione Scale, nonché molte altre proprietà.
Nota
Il toolkit fornisce anche l'implementazione ImageTouchBehavior, che estende questo TouchBehavior consentendo anche di personalizzare il Source di un elemento Image.
Importante
I comportamenti di .NET MAUI Community Toolkit non impostano la proprietà BindingContext di un comportamento, perché i comportamenti possono essere condivisi e applicati a più controlli mediante gli 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:
- si anima nell’arco di 250 millisecondi
- applica il
CubicInOutEasing - modifica
Opacityin 0.6 - modifica
Scalein 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>
Utilizzo 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;
}
}
Linguaggio di markup C#
Il nostro CommunityToolkit.Maui.Markup pacchetto fornisce un modo molto più conciso per usare questo 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 consente di personalizzare le proprietà dell'elemento associato VisualElement a seconda che il puntatore del mouse passi sopra l'elemento.
L'esempio seguente mostra come associare TouchBehavior a un HorizontalStackLayout e modificare BackgroundColor e Scale del HorizontalStackLayout quando un utente sposta il puntatore del mouse sul layout e su uno qualsiasi degli elementi 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.
L'esempio seguente mostra come aggiungere il TouchBehavior a un HorizontalStackLayout, associare il LongPressCommand al IncreaseLongPressCountCommand definito nel view model sottostante e impostare il LongPressDuration su 750 millisecondi.
<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>
Proprietà
| Proprietà | Tipo | Descrizione |
|---|---|---|
| Comando | ICommand |
Ottiene o imposta il ICommand da invocare quando l'utente ha completato un gesto di tocco. |
| CommandParameter | object |
Ottiene o imposta il parametro da passare alla Command proprietà . |
| CurrentHoverState | HoverState |
Ottiene o imposta il HoverState corrente del comportamento. |
| CurrentHoverStatus | HoverStatus |
Ottiene o imposta l'elemento corrente HoverStatus del comportamento. |
| CurrentInteractionStatus | TouchInteractionStatus |
Ottiene o imposta il corrente TouchInteractionStatus del comportamento. |
| CurrentTouchState | TouchState |
Restituisce o imposta il TouchState corrente del comportamento. |
| CurrentTouchStatus | TouchStatus |
Recupera o imposta il TouchStatus corrente del comportamento. |
| Durata predefinita dell'animazione | int |
Ottiene o imposta la durata dell'animazione quando la CurrentTouchState proprietà è TouchState.Default. |
| DefaultAnimationEasing | Easing |
Ottiene o definisce la funzione di easing dell'animazione quando la proprietà CurrentTouchState è TouchState.Default. |
| Colore di sfondo predefinito | Color |
Ottiene o imposta il colore di sfondo dell'elemento quando la CurrentTouchState proprietà è TouchState.Default. |
| Opacità predefinita | double |
Ottiene o imposta l'opacità dell'elemento quando la CurrentTouchState proprietà è TouchState.Default. |
| Rotazione predefinita | 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. |
| Scala predefinita | 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. |
| DisattivaSogliaTocco | int |
Ottiene o imposta il valore di soglia per la disabilitazione del tocco. |
| DurataAnimazioneAlPassaggioDelMouse | int |
Ottiene o imposta la durata dell'animazione quando la CurrentHoverState proprietà è HoverState.Hovered. |
| Smorzamento dell'animazione al passaggio del mouse | Easing |
Ottiene o imposta l'interpolazione dell'animazione quando la proprietà CurrentHoverState è HoverState.Hovered. |
| Colore di sfondo al passaggio del mouse | Color |
Ottiene o imposta il colore di sfondo dell'elemento quando la CurrentHoverState proprietà è HoverState.Hovered. |
| Opacità al passaggio del mouse | 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 il ICommand da invocare quando l'utente ha completato una pressione prolungata. |
| 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. |
| Durata animazione pressione | int |
Ottiene o imposta la durata dell'animazione quando la CurrentTouchState proprietà è TouchState.Pressed. |
| PressedAnimationEasing | Easing |
Ottiene o definisce l'interpolazione dell'animazione quando la proprietà CurrentTouchState è TouchState.Pressed. |
| ColoreSfondoPremuto | Color |
Ottiene o imposta il colore di sfondo dell'elemento quando la CurrentTouchState proprietà è TouchState.Pressed. |
| Opacità alla pressione | 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. |
| DovrebbeRendereTrasparenteLInputDeiFigli | bool |
Ottiene o imposta un valore che indica se gli elementi figlio dell'elemento devono essere resi trasparenti all'input. |
Eventi
| Evento | Descrizione |
|---|---|
CurrentTouchStateChanged |
Viene generato quando CurrentTouchState cambia. |
CurrentTouchStatusChanged |
Viene generato quando CurrentTouchStatus cambia. |
HoverStateChanged |
Si attiva quando CurrentHoverState cambia. |
HoverStatusChanged |
Si attiva quando CurrentHoverStatus cambia. |
InteractionStatusChanged |
Si attiva quando CurrentInteractionStatus cambia. |
LongPressCompleted |
Si attiva quando un gesto di pressione prolungata è stato completato. |
TouchGestureCompleted |
Si attiva quando un gesto di tocco è stato completato. |
Esempi
È possibile trovare un esempio di questo comportamento in azione nell'applicazione di esempio .NET MAUI Community Toolkit.
API
Puoi trovare il codice sorgente di TouchBehavior 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 |
| Colore di sfondo normale | Colore di sfondo predefinito |
| NormalScale | Scala predefinita |
| Opacità normale | Opacità predefinita |
| NormalTranslationX | DefaultTranslationX |
| NormalTranslationY | DefaultTranslationY |
| Rotazione normale | Rotazione predefinita |
| NormalRotationX | DefaultRotationX |
| NormalRotationY | DefaultRotationY |
| Durata normale dell'animazione | Durata predefinita dell'animazione |
| NormalAnimationEasing | DefaultAnimationEasing |
| NormalBackgroundImageSource | DefaultImageSource (spostato in ImageTouchBehavior) |
| Proporzioni immagine di sfondo normale | DefaultImageAspect (spostato in ImageTouchBehavior ) |
TouchBehavior è ora implementato come PlatformBehavior
Nel Xamarin Community Toolkit, TouchEffect è stato implementato come AttachedEffect. Per usare l'effetto, si utilizzano le proprietà allegate e le si applica a qualsiasi VisualElement
In .NET MAUI, TouchBehavior viene implementato come PlatformBehavior, che ora viene applicato alla raccolta dei comportamenti degli elementi; per ulteriori informazioni, vedere Platform Behaviors.
Nota: per impostazione predefinita, in .NET MAUI gli elementi
PlatformBehaviornon impostano la proprietàBindingContext, perché i comportamenti possono essere condivisi negli stili. L'oggettoTouchBehaviorimposta laBindingContextproprietà uguale all'oggettoVisualElementa cui viene applicato. Ciò significa che non dovresti condividere ilTouchBehaviortra gli elementi tramite gli 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"
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