Xamarin.Forms SwipeView
O SwipeView
é um controle de contêiner que envolve um item de conteúdo e fornece itens de menu de contexto que são revelados por um gesto de passar o dedo:
SwipeView
define as propriedades a seguir:
LeftItems
, do tipoSwipeItems
, que representa os itens de passar o dedo que podem ser invocados quando o controle é apagado do lado esquerdo.RightItems
, do tipoSwipeItems
, que representa os itens de passar o dedo que podem ser invocados quando o controle é apagado do lado direito.TopItems
, do tipoSwipeItems
, que representa os itens de passar o dedo que podem ser invocados quando o controle é apagado de cima para baixo.BottomItems
, do tipoSwipeItems
, que representa os itens de passar o dedo que podem ser invocados quando o controle é apagado de baixo para cima.Threshold
, do tipodouble
, que representa o número de unidades independentes de dispositivo que disparam um gesto de passar o dedo para revelar totalmente os itens de passar o dedo.
Essas propriedades são apoiadas por BindableProperty
objetos, o que significa que elas podem ser destinos de associações de dados e estilizadas.
Além disso, o SwipeView
herda a Content
propriedade da ContentView
classe . A Content
propriedade é a propriedade de conteúdo da SwipeView
classe e, portanto, não precisa ser definida explicitamente.
A SwipeView
classe também define três eventos:
SwipeStarted
é acionado quando um dedo é iniciado. OSwipeStartedEventArgs
objeto que acompanha esse evento tem umaSwipeDirection
propriedade do tipoSwipeDirection
.SwipeChanging
é acionado à medida que o dedo se move. OSwipeChangingEventArgs
objeto que acompanha esse evento tem umaSwipeDirection
propriedade, do tipoSwipeDirection
e umaOffset
propriedade do tipodouble
.SwipeEnded
é acionado quando um deslize termina. OSwipeEndedEventArgs
objeto que acompanha esse evento tem umaSwipeDirection
propriedade, do tipoSwipeDirection
e umaIsOpen
propriedade do tipobool
.
Além disso, SwipeView
inclui Open
métodos e Close
, que abrem e fecham programaticamente os itens de passar o dedo, respectivamente.
Observação
SwipeView
tem uma plataforma específica no iOS e no Android, que controla a transição usada ao abrir um SwipeView
. Para obter mais informações, consulte SwipeView Modo de Transição de Dedo No iOS e SwipeView Modo de Transição de Dedo No Android.
Criar um SwipeView
Um SwipeView
deve definir o conteúdo que o SwipeView
encapsula e os itens de passar o dedo que são revelados pelo gesto de passar o dedo. Os itens de passar o dedo são um ou mais SwipeItem
objetos colocados em uma das quatro SwipeView
coleções direcionais - LeftItems
, RightItems
, TopItems
ou BottomItems
.
O exemplo a seguir mostra como instanciar um SwipeView
no XAML:
<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>
Este é o código C# equivalente:
// 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
};
Neste exemplo, o SwipeView
conteúdo é um Grid
que contém um Label
:
Os itens de passar o SwipeView
dedo são usados para executar ações no conteúdo e são revelados quando o controle é apagado do lado esquerdo:
Por padrão, um item de passar o dedo é executado quando ele é tocado pelo usuário. No entanto, esse comportamento pode ser alterado. Para obter mais informações, consulte Modo de passar o dedo.
Depois que um item de passar o dedo for executado, os itens de passar o dedo ficarão ocultos e o SwipeView
conteúdo será exibido novamente. No entanto, esse comportamento pode ser alterado. Para obter mais informações, consulte Comportamento de deslizar o dedo.
Observação
Os itens de deslizar o dedo e o conteúdo do dedo podem ser colocados embutidos ou definidos como recursos.
Passar o dedo em itens
As LeftItems
coleções , RightItems
, TopItems
e BottomItems
são do tipo SwipeItems
. A SwipeItems
classe define as seguintes propriedades:
Mode
, do tipoSwipeMode
, que indica o efeito de uma interação de passar o dedo. Para obter mais informações sobre o modo de passar o dedo, consulte Modo de passar o dedo.SwipeBehaviorOnInvoked
, do tipoSwipeBehaviorOnInvoked
, que indica como umSwipeView
se comporta depois que um item de passar o dedo é invocado. Para obter mais informações sobre o comportamento de deslizar o dedo, consulte Comportamento de deslizar o dedo.
Essas propriedades são apoiadas por BindableProperty
objetos, o que significa que elas podem ser destinos de associações de dados e estilizadas.
Cada item de passar o dedo é definido como um SwipeItem
objeto colocado em uma das quatro SwipeItems
coleções direcionais. A SwipeItem
classe deriva da MenuItem
classe e adiciona os seguintes membros:
- Uma
BackgroundColor
propriedade, do tipoColor
, que define a cor da tela de fundo do item de passar o dedo. Essa propriedade é apoiada por uma propriedade associável. - Um
Invoked
evento, que é acionado quando o item de passar o dedo é executado.
Importante
A MenuItem
classe define várias propriedades, incluindo Command
, CommandParameter
, IconImageSource
e Text
. Essas propriedades podem ser definidas em um SwipeItem
objeto para definir sua aparência e definir um ICommand
que é executado quando o item de passar o dedo é invocado. Para obter mais informações, consulte Xamarin.Forms MenuItem.
O exemplo a seguir mostra dois SwipeItem
objetos na LeftItems
coleção de um 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>
A aparência de cada SwipeItem
um é definida por uma combinação das Text
propriedades , IconImageSource
e BackgroundColor
:
Quando um SwipeItem
é tocado, seu Invoked
evento é acionado e é manipulado por seu manipulador de eventos registrado. Além disso, o evento é acionado MenuItem.Clicked
. Como alternativa, a Command
propriedade pode ser definida como uma implementação ICommand
que será executada quando o SwipeItem
for invocado.
Observação
Quando a aparência de um SwipeItem
é definida apenas usando as Text
propriedades ou IconImageSource
, o conteúdo é sempre centralizado.
Além de definir itens de passar o dedo como SwipeItem
objetos, também é possível definir exibições personalizadas de item de passar o dedo. Para obter mais informações, consulte Itens de passar o dedo personalizados.
Passar o dedo na direção
SwipeView
dá suporte a quatro direções de passar o dedo diferentes, com a direção do dedo sendo definida pela coleção direcional SwipeItems
à qual os SwipeItem
objetos são adicionados. Cada direção de passar o dedo pode manter seus próprios itens de passar o dedo. Por exemplo, o exemplo a seguir mostra um SwipeView
cujos itens de passar o dedo dependem da direção do dedo:
<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>
Neste exemplo, o SwipeView
conteúdo pode ser apagado para a direita ou para a esquerda. Passar o dedo para a direita mostrará o item Excluir dedo, enquanto passar o dedo para a esquerda mostrará os itens Favorito e Compartilhar deslizar o dedo.
Aviso
Somente uma instância de uma coleção direcional SwipeItems
pode ser definida por vez em um SwipeView
. Portanto, você não pode ter duas LeftItems
definições em um SwipeView
.
Os SwipeStarted
eventos , SwipeChanging
e SwipeEnded
relatam a direção do dedo por meio da SwipeDirection
propriedade nos argumentos de evento. Essa propriedade é do tipo SwipeDirection
, que é uma enumeração composta por quatro membros:
Right
indica que ocorreu um deslize para a direita.Left
indica que ocorreu um dedo esquerdo.Up
indica que ocorreu um dedo para cima.Down
indica que ocorreu um deslize para baixo.
Passar o dedo no limite
SwipeView
inclui uma Threshold
propriedade, do tipo double
, que representa o número de unidades independentes do dispositivo que disparam um gesto de passar o dedo para revelar totalmente os itens de passar o dedo.
O exemplo a seguir mostra um SwipeView
que define a Threshold
propriedade :
<SwipeView Threshold="200">
<SwipeView.LeftItems>
<SwipeItems>
<SwipeItem Text="Favorite"
IconImageSource="favorite.png"
BackgroundColor="LightGreen" />
</SwipeItems>
</SwipeView.LeftItems>
<!-- Content -->
</SwipeView>
Neste exemplo, o SwipeView
deve ser apagado para 200 unidades independentes de dispositivo antes que o SwipeItem
seja totalmente revelado.
Observação
Atualmente, a Threshold
propriedade só é implementada no iOS e no Android.
Passar o dedo no modo
A SwipeItems
classe tem uma Mode
propriedade , que indica o efeito de uma interação de passar o dedo. Essa propriedade deve ser definida como um dos membros de SwipeMode
enumeração:
Reveal
indica que um dedo revela os itens de passar o dedo. Este é o valor padrão da propriedadeSwipeItems.Mode
.Execute
indica que um dedo executa os itens de passar o dedo.
No modo de revelação, o usuário desliza um SwipeView
para abrir um menu que consiste em um ou mais itens de passar o dedo e deve tocar explicitamente em um item de passar o dedo para executá-lo. Depois que o item de passar o dedo for executado, os itens de passar o dedo serão fechados e o SwipeView
conteúdo será exibido novamente. No modo de execução, o usuário desliza um SwipeView
para abrir um menu que consiste em mais um item de passar o dedo, que são executados automaticamente. Após a execução, os itens de passar o dedo são fechados e o SwipeView
conteúdo é exibido novamente.
O exemplo a seguir mostra um SwipeView
configurado para usar o modo de execução:
<SwipeView>
<SwipeView.LeftItems>
<SwipeItems Mode="Execute">
<SwipeItem Text="Delete"
IconImageSource="delete.png"
BackgroundColor="LightPink"
Command="{Binding DeleteCommand}" />
</SwipeItems>
</SwipeView.LeftItems>
<!-- Content -->
</SwipeView>
Neste exemplo, o SwipeView
conteúdo pode ser apagado para a direita para revelar o item de passar o dedo, que é executado imediatamente. Após a execução, o SwipeView
conteúdo é exibido novamente.
Comportamento de passar o dedo
A SwipeItems
classe tem uma SwipeBehaviorOnInvoked
propriedade , que indica como um SwipeView
se comporta depois que um item de passar o dedo é invocado. Essa propriedade deve ser definida como um dos membros de SwipeBehaviorOnInvoked
enumeração:
Auto
indica que, no modo de revelação, oSwipeView
fecha depois que um item de passar o dedo é invocado e, no modo de execução, oSwipeView
permanece aberto depois que um item de passar o dedo é invocado. Este é o valor padrão da propriedadeSwipeItems.SwipeBehaviorOnInvoked
.Close
indica que o fecha depois que um item de passar oSwipeView
dedo é invocado.RemainOpen
indica que oSwipeView
permanece aberto depois que um item de passar o dedo é invocado.
O exemplo a seguir mostra um SwipeView
configurado para permanecer aberto depois que um item de passar o dedo é invocado:
<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>
Itens de passar o dedo personalizados
Os itens de passar o dedo personalizados podem ser definidos com o SwipeItemView
tipo . A SwipeItemView
classe deriva da ContentView
classe e adiciona as seguintes propriedades:
Command
, do tipoICommand
, que é executado quando um item de passar o dedo é tocado.CommandParameter
, do tipoobject
, que é o parâmetro passado paraCommand
.
Essas propriedades são apoiadas por BindableProperty
objetos, o que significa que elas podem ser destinos de associações de dados e estilizadas.
A SwipeItemView
classe também define um Invoked
evento que é acionado quando o item é tocado, depois que o Command
é executado.
O exemplo a seguir mostra um SwipeItemView
objeto na LeftItems
coleção de um 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>
Neste exemplo, o SwipeItemView
compreende um StackLayout
que contém um Entry
e um Label
. Depois que o usuário insere a Entry
entrada no , o restante do SwipeViewItem
pode ser tocado, o que executa o ICommand
definido pela SwipeItemView.Command
propriedade .
Abrir e fechar um SwipeView programaticamente
SwipeView
inclui Open
métodos e Close
, que abrem e fecham programaticamente os itens de passar o dedo, respectivamente. Por padrão, esses métodos animarão o SwipeView
quando for aberto ou fechado.
O Open
método requer um OpenSwipeItem
argumento para especificar a direção da qual o SwipeView
será aberto. A OpenSwipeItem
enumeração tem quatro membros:
LeftItems
, que indica que oSwipeView
será aberto da esquerda, para revelar os itens de passar o dedo naLeftItems
coleção.TopItems
, que indica que oSwipeView
será aberto na parte superior, para revelar os itens de passar o dedo naTopItems
coleção.RightItems
, que indica que oSwipeView
será aberto à direita, para revelar os itens de passar o dedo naRightItems
coleção.BottomItems
, que indica que oSwipeView
será aberto na parte inferior, para revelar os itens de passar o dedo naBottomItems
coleção.
Além disso, o Open
método também aceita um argumento opcional bool
que define se o SwipeView
será animado quando for aberto.
Dado um SwipeView
chamado swipeView
, o exemplo a seguir mostra como abrir um SwipeView
para revelar os itens de passar o dedo na LeftItems
coleção:
swipeView.Open(OpenSwipeItem.LeftItems);
Em swipeView
seguida, o pode ser fechado com o Close
método :
swipeView.Close();
Observação
O Close
método também aceita um argumento opcional bool
que define se o SwipeView
será animado quando for fechado.
Desabilitar um SwipeView
Um aplicativo pode inserir um estado em que passar o dedo de um item de conteúdo não é uma operação válida. Nesses casos, o SwipeView
pode ser desabilitado definindo sua IsEnabled
propriedade como false
. Isso impedirá que os usuários possam deslizar o conteúdo para revelar itens de passar o dedo.
Além disso, ao definir a Command
propriedade de um SwipeItem
ou SwipeItemView
, o CanExecute
delegado do ICommand
pode ser especificado para habilitar ou desabilitar o item de passar o dedo.