Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das TouchBehavior ist ein Behavior, das die Interaktion mit jedem VisualElement über Touch-, Mausklick- und Hover-Ereignisse ermöglicht. Die TouchBehavior-Implementierung ermöglicht es, viele verschiedene visuelle Eigenschaften des VisualElement, an das sie angefügt ist, anzupassen, z. B. die BackgroundColor, Opacity, Rotation und Scale sowie viele andere Eigenschaften.
Hinweis
Das Toolkit bietet auch die ImageTouchBehavior-Implementierung, die diese TouchBehavior erweitert, indem es auch die Möglichkeit bietet, die Source eines Image-Elements anzupassen.
Wichtig
.NET MAUI Community Toolkit Behaviors legt den BindingContext eines Verhaltens nicht fest, da Verhalten über Stile freigegeben und auf mehrere Steuerelemente angewendet werden können. Weitere Informationen finden Sie unter .NET MAUI Behaviors.
Syntax
Die folgenden Beispiele zeigen, wie Sie das TouchBehavior einem übergeordneten HorizontalStackLayout hinzufügen und die folgenden Animationen ausführen, wenn ein Benutzer das HorizontalStackLayout oder eines seiner untergeordneten Elemente berührt oder darauf klickt:
- animiert über einen Zeitraum von 250 Millisekunden
- wendet
CubicInOutEasingan - ändert die
Opacityauf 0,6 - ändert
Scalein 0,8
XAML
Einbinden des XAML-Namespace
Um das Toolkit in XAML verwenden zu können, muss der folgende xmlns-Abschnitt zu Ihrer Seite oder Ansicht hinzugefügt werden:
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
Daher Folgendes:
<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>
Würde geändert werden, um xmlns wie folgt einzufügen:
<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>
Verwenden von 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#
TouchBehavior kann wie folgt in C# verwendet werden:
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
Das Paket CommunityToolkit.Maui.Markup bietet eine viel präzisere Möglichkeit, dieses Behavior in C# zu verwenden.
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
});
}
}
Weitere Beispiele
Umgang mit Mouseover-Interaktionen
Die TouchBehavior bietet die Möglichkeit, die Eigenschaften der angefügten VisualElement anzupassen, je nachdem, ob der Mauszeiger über dem Element bewegt wird.
Das folgende Beispiel zeigt, wie Sie die TouchBehavior an eine HorizontalStackLayout anhängen und die BackgroundColor und Scale der HorizontalStackLayout ändern, wenn ein Benutzer den Mauszeiger über das Layout und beliebige untergeordnete Elemente bewegt.
<HorizontalStackLayout
Padding="20"
Background="Black"
HorizontalOptions="Center">
<HorizontalStackLayout.Behaviors>
<toolkit:TouchBehavior
HoveredBackgroundColor="{StaticResource Gray900}"
HoveredScale="1.2" />
</HorizontalStackLayout.Behaviors>
</HorizontalStackLayout>
Umgang mit der Interaktion durch langes Drücken
Die TouchBehavior bietet die Möglichkeit, das Szenario zu behandeln, wenn ein Benutzer über einen längeren Zeitraum drückt. Dieser Zeitraum kann durch LongPressDuration definiert werden, das in Millisekunden angegeben wird.
Das folgende Beispiel zeigt, wie Sie die TouchBehavior einem HorizontalStackLayouthinzufügen, die LongPressCommand an die im Sicherungsansichtsmodell definierten IncreaseLongPressCountCommand binden und die LongPressDuration auf 750 Millisekunden festlegen.
<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>
Eigenschaften
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
| Get-Help | ICommand |
Ruft die ICommand ab, die aufgerufen werden soll, wenn der Benutzer eine Touchgeste abgeschlossen hat, oder legt diese fest. |
| CommandParameter | object |
Dient zum Abrufen oder Festlegen des Parameters, der an die Command-Eigenschaft übergeben werden soll. |
| CurrentHoverState | HoverState |
Dient zum Abrufen oder Festlegen des aktuellen HoverState-Verhaltens. |
| CurrentHoverStatus | HoverStatus |
Dient zum Abrufen oder Festlegen des aktuellen HoverStatus-Verhaltens. |
| Aktueller Interaktionsstatus | TouchInteractionStatus |
Dient zum Abrufen oder Festlegen des aktuellen TouchInteractionStatus-Verhaltens. |
| AktuellerBerührungsstatus | TouchState |
Dient zum Abrufen oder Festlegen des aktuellen TouchState-Verhaltens. |
| Aktueller Touch-Status | TouchStatus |
Dient zum Abrufen oder Festlegen des aktuellen TouchStatus-Verhaltens. |
| DefaultAnimationDuration | int |
Ruft die Dauer der Animation ab, wenn die CurrentTouchState-Eigenschaft TouchState.Default ist, oder legt sie fest. |
| DefaultAnimationEasing | Easing |
Ruft das Easing der Animation ab oder legt es fest, wenn die CurrentTouchState-Eigenschaft TouchState.Default ist. |
| Standardhintergrundfarbe | Color |
Dient zum Abrufen oder Festlegen der Hintergrundfarbe des Elements, wenn die CurrentTouchState-Eigenschaft TouchState.Default ist. |
| Standarddeckkraft | double |
Ruft die Deckkraft des Elements ab oder legt sie fest, wenn die CurrentTouchState-Eigenschaft TouchState.Default ist. |
| DefaultRotation | double |
Ruft die Drehung um die X- und Y-Achsen des Elements ab oder legt sie fest, wenn die CurrentTouchState-Eigenschaft TouchState.Default ist. |
| DefaultRotationX | double |
Ruft die Drehung des Elements um die X-Achse ab oder legt sie fest, wenn die CurrentTouchState-Eigenschaft TouchState.Default ist. |
| DefaultRotationY | double |
Ruft die Drehung des Elements um die Y-Achse ab oder legt sie fest, wenn die CurrentTouchState-Eigenschaft TouchState.Default ist. |
| DefaultScale | double |
Ruft die Skalierung des Elements ab, wenn die CurrentTouchState-Eigenschaft TouchState.Default ist, oder legt diese fest. |
| DefaultTranslationX | double |
Ruft die X-Übersetzung des Elements ab, wenn die CurrentTouchState-Eigenschaft TouchState.Default ist, oder legt diese fest. |
| DefaultTranslationY | double |
Dient zum Abrufen oder Festlegen der Y-Übersetzung des Elements, wenn die CurrentTouchState-Eigenschaft TouchState.Default ist. |
| DisallowTouchThreshold | int |
Ruft den Schwellenwert ab, ab dem Touch-Eingaben nicht mehr zugelassen werden, oder legt ihn fest. |
| HoveredAnimationDuration | int |
Ruft die Dauer der Animation ab, wenn die CurrentHoverState-Eigenschaft HoverState.Hovered ist, oder legt sie fest. |
| HoveredAnimationEasing | Easing |
Ruft das Easing der Animation ab oder legt es fest, wenn die Eigenschaft CurrentHoverState auf HoverState.Hovered festgelegt ist. |
| Hintergrundfarbe beim Darüberfahren mit der Maus | Color |
Dient zum Abrufen oder Festlegen der Hintergrundfarbe des Elements, wenn die CurrentHoverState-Eigenschaft HoverState.Hovered ist. |
| Deckkraft beim Darüberfahren | double |
Dient zum Abrufen oder Festlegen der Deckkraft des Elements, wenn die CurrentHoverState Eigenschaft HoverState.Hovered ist. |
| HoveredRotation | double |
Ruft die Drehung des Elements um die X- und Y-Achse ab oder legt sie fest, wenn die CurrentHoverState-Eigenschaft HoverState.Hovered ist. |
| HoveredRotationX | double |
Ruft die Rotation des Elements um die X-Achse ab oder legt sie fest, wenn die Eigenschaft CurrentHoverState den Wert HoverState.Hovered hat. |
| HoveredRotationY | double |
Ruft die Drehung des Elements um die Y-Achse ab oder legt sie fest, wenn die CurrentHoverState-Eigenschaft HoverState.Hovered ist. |
| HoveredScale | double |
Ruft die Skalierung des Elements ab, wenn die CurrentHoverState-Eigenschaft HoverState.Hovered ist, oder legt diese fest. |
| HoveredTranslationX | double |
Ruft die X-Übersetzung des Elements ab, wenn die CurrentHoverState-Eigenschaft HoverState.Hovered ist, oder legt diese fest. |
| HoveredTranslationY | double |
Dient zum Abrufen oder Festlegen der Y-Übersetzung des Elements, wenn die CurrentHoverState-Eigenschaft HoverState.Hovered ist. |
| IsEnabled | bool |
Ruft einen Wert ab, der angibt, ob das Verhalten aktiviert ist, oder legt diesen fest. |
| LongPressCommand | ICommand |
Ruft den ICommand ab, der aufgerufen werden soll, wenn der Benutzer ein langes Drücken abgeschlossen hat, oder legt diesen fest. |
| LongPressCommandParameter | object |
Dient zum Abrufen oder Festlegen des Parameters, der an die LongPressCommand-Eigenschaft übergeben werden soll. |
| LongPressDuration | int |
Ruft die Dauer in Millisekunden ab, die zum Auslösen der langen Druckgeste erforderlich ist, oder legt sie fest. |
| PressedAnimationDuration | int |
Ruft die Dauer der Animation ab, wenn die CurrentTouchState-Eigenschaft TouchState.Pressed ist, oder legt sie fest. |
| Animations-Beschleunigungskurve beim Drücken | Easing |
Ruft das Easing der Animation ab oder legt es fest, wenn die Eigenschaft CurrentTouchState auf TouchState.Pressed festgelegt ist. |
| PressedBackgroundColor | Color |
Dient zum Abrufen oder Festlegen der Hintergrundfarbe des Elements, wenn die CurrentTouchState-Eigenschaft TouchState.Pressed ist. |
| PressedOpacity | double |
Dient zum Abrufen oder Festlegen der Deckkraft des Elements, wenn die CurrentTouchState Eigenschaft TouchState.Pressed ist. |
| Gedrückte Drehung | double |
Ruft die Drehung des Elements um die X- und Y-Achse ab oder legt sie fest, wenn die CurrentTouchState-Eigenschaft TouchState.Pressed ist. |
| PressedRotationX | double |
Ruft die Rotation des Elements um die X-Achse ab oder legt sie fest, wenn die Eigenschaft CurrentTouchState den Wert TouchState.Pressed hat. |
| PressedRotationY | double |
Ruft die Drehung des Elements um die Y-Achse ab oder legt sie fest, wenn die CurrentTouchState-Eigenschaft TouchState.Pressed ist. |
| PressedScale | double |
Ruft die Skalierung des Elements ab, wenn die CurrentTouchState-Eigenschaft TouchState.Pressed ist, oder legt diese fest. |
| PressedTranslationX | double |
Ruft die X-Übersetzung des Elements ab, wenn die CurrentTouchState-Eigenschaft TouchState.Pressed ist, oder legt diese fest. |
| PressedTranslationY | double |
Dient zum Abrufen oder Festlegen der Y-Übersetzung des Elements, wenn die CurrentTouchState-Eigenschaft TouchState.Pressed ist. |
| Soll die Eingabe der untergeordneten Elemente transparent machen | bool |
Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob die untergeordneten Elemente des Elements eingabetransparent gemacht werden sollen. |
Ereignisse
| Ereignis | Beschreibung |
|---|---|
CurrentTouchStateChanged |
Wird ausgelöst, wenn sich CurrentTouchState ändert. |
CurrentTouchStatusChanged |
Wird ausgelöst, wenn sich CurrentTouchStatus ändert. |
HoverStateChanged |
Wird ausgelöst, wenn sich CurrentHoverState ändert. |
HoverStatusChanged |
Wird ausgelöst, wenn sich CurrentHoverStatus ändert. |
InteractionStatusChanged |
Wird ausgelöst, wenn sich CurrentInteractionStatus ändert. |
LongPressCompleted |
Wird ausgelöst, wenn eine lange Drückgeste abgeschlossen ist. |
TouchGestureCompleted |
Wird ausgelöst, wenn eine Touchgeste abgeschlossen wurde. |
Beispiele
Sie finden ein Beispiel für dieses Verhalten in Aktion in der Beispielanwendung für das .NET MAUI Community Toolkit.
API
Sie finden den Quellcode für TouchBehavior über das GitHub-Repository für das .NET MAUI Community Toolkit.
Migrieren von Xamarin Community Toolkit
Im Xamarin Community Toolkit gab es TouchEffect, wenn Sie ein Upgrade für eine App von Xamarin.Forms auf .NET MAUI durchführen, gibt es einige Breaking Changes, die Sie beachten sollten:
API-Namensänderungen
| Name im Xamarin Community Toolkit | Name im MAUI Community Toolkit |
|---|---|
| TouchEffect | TouchBehavior |
| Normale Hintergrundfarbe | Standardhintergrundfarbe |
| NormalScale | DefaultScale |
| Normale Deckkraft | Standarddeckkraft |
| NormalTranslationX | DefaultTranslationX |
| NormalTranslationY | DefaultTranslationY |
| NormalRotation | DefaultRotation |
| NormalRotationX | DefaultRotationX |
| NormalRotationY | DefaultRotationY |
| NormalAnimationDuration | DefaultAnimationDuration |
| NormalAnimationEasing | DefaultAnimationEasing |
| NormalBackgroundImageSource | DefaultImageSource (in ImageTouchBehavior verschoben) |
| NormalBackgroundImageAspect | DefaultImageAspect (In ImageTouchBehavior verschoben) |
TouchBehavior ist jetzt als PlatformBehavior implementiert.
Im Xamarin Community Toolkit wurde TouchEffect als AttachedEffect implementiert. Um den Effekt zu verwenden, verwenden Sie die angefügten Eigenschaften und wenden sie auf jedes VisualElement an
Weitere Informationen zur Implementierung von TouchBehavior in .NET MAUI als PlatformBehavior, was jetzt auf die Elementverhaltenssammlung angewendet wird, finden Sie unter Platform Behaviors.
Hinweis: Standardmäßig legen
PlatformBehaviors in .NET MAUI die EigenschaftBindingContextnicht fest, da Behaviors in Formatvorlagen gemeinsam verwendet werden können.TouchBehaviorlegt die EigenschaftBindingContextgleichVisualElementfest, auf das sie angewendet wird. Dies bedeutet, dass Sie dasTouchBehaviorzwischen Elementen über Formatvorlagen nicht teilen sollten.
Nachfolgend finden Sie ein Beispiel für einen TouchEffect, der auf eine Ansicht in Xamarin.Forms angewendet wird:
<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>
Das Äquivalent TouchBehavior in .NET MAUI würde wie folgt aussehen:
<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