Xamarin.Forms SwipeView
Dies SwipeView
ist ein Containersteuerelement, das ein Inhaltselement umschließt und Kontextmenüelemente bereitstellt, die durch eine Streifbewegung angezeigt werden:
SwipeView
definiert die folgenden Eigenschaften:
LeftItems
vom TypSwipeItems
, der die Streichelemente darstellt, die aufgerufen werden können, wenn das Steuerelement von der linken Seite gestrichen wird.RightItems
vom TypSwipeItems
, der die Wischelemente darstellt, die aufgerufen werden können, wenn das Steuerelement von der rechten Seite gewischt wird.TopItems
, vom TypSwipeItems
, der die Wischelemente darstellt, die aufgerufen werden können, wenn das Steuerelement von oben nach unten gewischt wird.BottomItems
, vom TypSwipeItems
, der die Wischelemente darstellt, die aufgerufen werden können, wenn das Steuerelement von unten nach oben gewischt wird.Threshold
, des Typsdouble
, der die Anzahl der geräteunabhängigen Einheiten darstellt, die eine Wischgeste auslösen, um Wischelemente vollständig aufzudecken.
Diese Eigenschaften werden von BindableProperty
-Objekten unterstützt, was bedeutet, dass sie Ziele von Datenbindungen sein können und formatiert werden können.
Darüber hinaus erbt die SwipeView
die Eigenschaft Content
von der Klasse ContentView
. Die Content
-Eigenschaft ist die Inhaltseigenschaft der SwipeView
-Klasse und muss daher nicht explizit festgelegt werden.
Die Klasse SwipeView
definiert auch drei Ereignisse:
SwipeStarted
wird ausgelöst, wenn eine Streifbewegung gestartet wird. DasSwipeStartedEventArgs
-Objekt, das dieses Ereignis begleitet, hat eineSwipeDirection
Eigenschaft vom TypSwipeDirection
.SwipeChanging
wird ausgelöst, wenn die Streifbewegung erfolgt. DasSwipeChangingEventArgs
-Objekt, das dieses Ereignis begleitet, hat eineSwipeDirection
-Eigenschaft vom TypSwipeDirection
und eineOffset
-Eigenschaft vom Typdouble
.SwipeEnded
wird ausgelöst, wenn eine Streifbewegung endet. DasSwipeEndedEventArgs
-Objekt, das dieses Ereignis begleitet, hat eineSwipeDirection
-Eigenschaft vom TypSwipeDirection
und eineIsOpen
-Eigenschaft vom Typbool
.
Darüber hinaus enthält SwipeView
die Methoden Open
und Close
, mit denen die Wischelemente programmatisch geöffnet bzw. geschlossen werden.
Hinweis
SwipeView
hat auf iOS und Android eine plattformspezifische Funktion, die den Übergang steuert, der beim Öffnen eines SwipeView
verwendet wird. Weitere Informationen finden Sie unter SwipeView Swipe Transition Mode unter iOS und SwipeView Swipe Transition Mode unter Android.
Erstellen einer SwipeView
Ein SwipeView
muss den Inhalt definieren, um den sich das SwipeView
wickelt, und die Elemente, die durch die Wischgeste angezeigt werden. Die Wischelemente sind ein oder mehrere SwipeItem
-Objekte, die in einer der vier SwipeView
-Richtungssammlungen – LeftItems
, RightItems
, TopItems
oder BottomItems
– platziert sind.
Das folgende Beispiel zeigt, wie man ein SwipeView
in XAML instanziiert:
<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>
Der entsprechende C#-Code lautet:
// 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
};
In diesem Beispiel ist der SwipeView
-Inhalt ein Grid
, der ein Label
enthält:
Die Wischelemente werden verwendet, um Aktionen auf dem SwipeView
-Inhalt auszuführen, und werden angezeigt, wenn das Steuerelement von der linken Seite gewischt wird:
Standardmäßig wird ein Wischelement ausgeführt, wenn es von der Benutzer*in angetippt wird. Dieses Verhalten kann jedoch geändert werden. Weitere Informationen finden Sie unter Wischmodus.
Nach der Ausführung eines Wischvorgangs werden die Wischvorgänge ausgeblendet und der SwipeView
-Inhalt wird wieder angezeigt. Dieses Verhalten kann jedoch geändert werden. Weitere Informationen finden Sie unter Wischverhalten.
Hinweis
Wischinhalte und Wischelemente können inline platziert oder als Ressourcen definiert werden.
Wischen von Elementen
Die Sammlungen LeftItems
, RightItems
, TopItems
und BottomItems
sind alle vom Typ SwipeItems
. Die SwipeItems
-Klasse definiert die folgenden Eigenschaften:
Mode
, des TypsSwipeMode
, der die Auswirkung einer Wischinteraktion anzeigt. Weitere Informationen zum Wischmodus finden Sie unter Wischmodus.SwipeBehaviorOnInvoked
, vom TypSwipeBehaviorOnInvoked
, der angibt, wie sich einSwipeView
verhält, nachdem ein Wischelement aufgerufen wurde. Weitere Informationen zum Wischverhalten finden Sie unter Wischverhalten.
Diese Eigenschaften werden von BindableProperty
-Objekten unterstützt, was bedeutet, dass sie Ziele von Datenbindungen sein können und formatiert werden können.
Jedes Wischelement ist als SwipeItem
-Objekt definiert, das in eine der vier SwipeItems
-Richtungssammlungen eingeordnet wird. Die Klasse SwipeItem
leitet von der Klasse MenuItem
ab und fügt die folgenden Mitglieder hinzu:
- Eine
BackgroundColor
-Eigenschaft vom TypColor
, die die Hintergrundfarbe des Swipe-Elements definiert. Diese Eigenschaft wird durch eine bindungsfähige Eigenschaft unterstützt. - Ein
Invoked
Ereignis, das ausgelöst wird, wenn das Wischelement ausgeführt wird.
Wichtig
Die Klasse MenuItem
definiert mehrere Eigenschaften, darunter Command
, CommandParameter
, IconImageSource
und Text
. Diese Eigenschaften können für ein SwipeItem
-Objekt festgelegt werden, um sein Aussehen zu definieren und um ein ICommand
zu definieren, das ausgeführt wird, wenn das Streichelement aufgerufen wird. Weitere Informationen finden Sie unter Xamarin.Forms MenuItem.
Das folgende Beispiel zeigt zwei SwipeItem
-Objekte in der LeftItems
-Sammlung eines 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>
Das Aussehen der einzelnen SwipeItem
wird durch eine Kombination der Eigenschaften Text
, IconImageSource
und BackgroundColor
bestimmt:
Wenn ein SwipeItem
angetippt wird, wird sein Invoked
-Ereignis ausgelöst und von seinem registrierten Ereignishandler behandelt. Außerdem wird das Ereignis MenuItem.Clicked
ausgelöst. Alternativ kann die Command
-Eigenschaft auf eine ICommand
-Implementierung gesetzt werden, die ausgeführt wird, wenn die SwipeItem
aufgerufen wird.
Hinweis
Wenn das Aussehen eines SwipeItem
nur mit den Eigenschaften Text
oder IconImageSource
definiert wird, wird der Inhalt immer zentriert.
Neben der Definition von Wischelementen als SwipeItem
-Objekte ist es auch möglich, benutzerdefinierte Wischelementansichten zu definieren. Weitere Informationen finden Sie unter Benutzerdefinierte Wischelemente.
Wischrichtungen
SwipeView
unterstützt vier verschiedene Wischrichtungen, wobei die Wischrichtung durch die richtungsbezogene SwipeItems
-Sammlung definiert wird, der die SwipeItem
-Objekte hinzugefügt werden. Jede Wischrichtung kann ihre eigenen Wischelemente enthalten. Das folgende Beispiel zeigt ein SwipeView
, dessen Wischelemente von der Wischrichtung abhängen:
<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>
In diesem Beispiel kann der SwipeView
-Inhalt nach rechts oder links gestrichen werden. Wenn Sie nach rechts wischen, wird das Wischelement Löschen angezeigt und wenn Sie nach links wischen, werden die Wischelemente Favorit und Teilen angezeigt.
Warnung
Auf einem SwipeView
kann jeweils nur eine Instanz einer gerichteten SwipeItems
-Sammlung eingestellt werden. Daher können nicht zwei LeftItems
-Definitionen für eine SwipeView
vorliegen.
Die Ereignisse SwipeStarted
, SwipeChanging
und SwipeEnded
melden die Wischrichtung über die Eigenschaft SwipeDirection
in den Ereignisargumenten. Diese Eigenschaft ist vom Typ SwipeDirection
, einer Aufzählung, die aus vier Mitgliedern besteht:
Right
zeigt an, dass eine Wischbewegung nach rechts stattgefunden hat.Left
zeigt an, dass eine Wischbewegung nach links stattgefunden hat.Up
zeigt an, dass eine Wischbewegung nach oben stattgefunden hat.Down
zeigt an, dass eine Wischbewegung nach unten stattgefunden hat.
Schwellenwert für Wischen
SwipeView
enthält eine Threshold
-Eigenschaft vom Typ double
, die die Anzahl der geräteunabhängigen Einheiten darstellt, die eine Wischgeste auslösen, um Wischelemente vollständig aufzudecken.
Das folgende Beispiel zeigt einen SwipeView
, der die Eigenschaft Threshold
festlegt:
<SwipeView Threshold="200">
<SwipeView.LeftItems>
<SwipeItems>
<SwipeItem Text="Favorite"
IconImageSource="favorite.png"
BackgroundColor="LightGreen" />
</SwipeItems>
</SwipeView.LeftItems>
<!-- Content -->
</SwipeView>
In diesem Beispiel muss das SwipeView
für 200 geräteunabhängige Einheiten gewischt werden, bevor das SwipeItem
vollständig angezeigt wird.
Hinweis
Derzeit wird die Threshold
Eigenschaft nur unter iOS und Android implementiert.
Wischmodus
Die Klasse SwipeItems
verfügt über eine Mode
-Eigenschaft, die die Wirkung einer Wischinteraktion angibt. Diese Eigenschaft sollte auf eines der SwipeMode
-Enumerationsmembers gesetzt werden:
Reveal
zeigt an, dass eine Wischbewegung die Wischelemente aufdeckt. Dies ist der Standardwert der EigenschaftSwipeItems.Mode
.Execute
zeigt an, dass eine Wischbewegung die Wischelemente ausführt.
Im Aufdeckungsmodus wischt der/die Benutzer*in über ein SwipeView
, um ein Menü zu öffnen, das aus einem oder mehreren Streichelementen besteht, und muss explizit auf ein Streichelement tippen, um es auszuführen. Nach der Ausführung des Wischelements werden die Wischelemente geschlossen und der SwipeView
-Inhalt wird wieder angezeigt. Im Ausführungsmodus wischt der/die Benutzer*in über ein SwipeView
, um ein Menü zu öffnen, das aus weiteren Wischoptionen besteht, die dann automatisch ausgeführt werden. Nach der Ausführung werden die Wischelemente geschlossen und der SwipeView
-Inhalt wird wieder angezeigt.
Das folgende Beispiel zeigt einen SwipeView
, der für den Ausführungsmodus konfiguriert ist:
<SwipeView>
<SwipeView.LeftItems>
<SwipeItems Mode="Execute">
<SwipeItem Text="Delete"
IconImageSource="delete.png"
BackgroundColor="LightPink"
Command="{Binding DeleteCommand}" />
</SwipeItems>
</SwipeView.LeftItems>
<!-- Content -->
</SwipeView>
In diesem Beispiel kann der SwipeView
-Inhalt nach rechts gewischt werden, um das Wischelement anzuzeigen, das sofort ausgeführt wird. Nach der Ausführung wird der Inhalt von SwipeView
erneut angezeigt.
Wischverhalten
Die SwipeItems
-Klasse hat eine SwipeBehaviorOnInvoked
-Eigenschaft, die angibt, wie sich ein SwipeView
nach dem Aufrufen eines Wischelements verhält. Diese Eigenschaft sollte auf eines der SwipeBehaviorOnInvoked
-Enumerationsmembers gesetzt werden:
Auto
zeigt an, dassSwipeView
im Einblendungsmodus geschlossen wird, nachdem ein Wischelement aufgerufen wurde, und im Ausführungsmodus bleibtSwipeView
offen, nachdem ein Wischelement aufgerufen wurde. Dies ist der Standardwert der EigenschaftSwipeItems.SwipeBehaviorOnInvoked
.Close
zeigt an, dass dieSwipeView
nach dem Aufrufen eines Wischelements geschlossen wird.RemainOpen
zeigt an, dass dasSwipeView
nach dem Aufrufen eines Wischelements geöffnet bleibt.
Das folgende Beispiel zeigt ein SwipeView
, das so konfiguriert ist, dass es offen bleibt, nachdem ein Wischelement aufgerufen wurde:
<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>
Benutzerdefinierte Wischelemente
Benutzerdefinierte Wischelemente können mit dem Typ SwipeItemView
definiert werden. Die Klasse SwipeItemView
leitet sich von der Klasse ContentView
ab und fügt die folgenden Eigenschaften hinzu:
Command
, vom TypICommand
, die ausgeführt wird, wenn ein Wischelement angetippt wird.CommandParameter
, vom Typobject
: Parameter, der an denCommand
übergeben wird.
Diese Eigenschaften werden von BindableProperty
-Objekten unterstützt, was bedeutet, dass sie Ziele von Datenbindungen sein können und formatiert werden können.
Die SwipeItemView
Klasse definiert auch ein Invoked
Ereignis, das ausgelöst wird, wenn das Element angetippt wird, nachdem das Command
Element ausgeführt wurde.
Das folgende Beispiel zeigt ein SwipeItemView
-Objekt in der LeftItems
-Sammlung eines 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>
In diesem Beispiel umfasst das SwipeItemView
ein StackLayout
, das ein Entry
und ein Label
enthält. Nachdem der/die Benutzer*in Eingaben in das Entry
eingegeben hat, kann der Rest des SwipeViewItem
angetippt werden, wodurch das ICommand
ausgeführt wird, das durch die Eigenschaft SwipeItemView.Command
definiert ist.
Programmgesteuertes Öffnen und Schließen von SwipeView
SwipeView
enthält die Methoden Open
und Close
, mit denen die Wischelemente programmatisch geöffnet bzw. geschlossen werden. Standardmäßig animieren diese Methoden das SwipeView
, wenn es geöffnet oder geschlossen wird.
Die Open
-Methode erfordert ein OpenSwipeItem
-Argument, um die Richtung anzugeben, aus der SwipeView
geöffnet werden soll. Die Enumeration OpenSwipeItem
hat vier Mitglieder:
LeftItems
, was bedeutet, dassSwipeView
von links geöffnet wird, um die Wischelemente in derLeftItems
-Sammlung zu zeigen.TopItems
, was bedeutet, dass dieSwipeView
von oben geöffnet wird, um die Wischelemente in derTopItems
-Sammlung einzublenden.RightItems
, was bedeutet, dassSwipeView
von rechts geöffnet wird, um die Wischelemente in derRightItems
-Sammlung anzuzeigen.BottomItems
, was bedeutet, dassSwipeView
von unten geöffnet wird, um die Wischelemente in derBottomItems
-Sammlung zu zeigen.
Darüber hinaus akzeptiert die Open
-Methode auch ein optionales bool
-Argument, das festlegt, ob das SwipeView
beim Öffnen animiert wird.
Anhand eines SwipeView
mit dem Namen swipeView
zeigt das folgende Beispiel, wie ein SwipeView
geöffnet wird, um die Wischelemente in der Sammlung LeftItems
anzuzeigen:
swipeView.Open(OpenSwipeItem.LeftItems);
swipeView
kann dann mit der Methode Close
geschlossen werden:
swipeView.Close();
Hinweis
Die Close
-Methode akzeptiert auch ein optionales bool
-Argument, das festlegt, ob das SwipeView
beim Schließen animiert wird.
Deaktivieren einer SwipeView
Eine Anwendung kann einen Zustand eingeben, in dem das Wischen eines Inhaltselements kein gültiger Vorgang ist. In solchen Fällen kann die SwipeView
deaktiviert werden, indem die zugehörige IsEnabled
-Eigenschaft auf false
festgelegt wird. Dadurch wird verhindert, dass die Benutzenden Inhalte durch Wischen anzeigen können, um Wischelemente anzuzeigen.
Außerdem kann bei der Definition der Command
-Eigenschaft eines SwipeItem
oder SwipeItemView
der CanExecute
-Delegat des ICommand
angegeben werden, um das Wischelement zu aktivieren oder zu deaktivieren.