web-dev-qa-db-fra.com

Comment ajouter un événement Click dans la disposition ou le cadre de la pile

Je suis nouveau dans xamarin.forms, aidez-moi à ajouter un événement de clic dans la disposition de la pile ou le cadre

<Frame Grid.Column="0" BackgroundColor="#ffffff" Grid.Row="0" HasShadow="true" OutlineColor = "Black">
</Frame>


<StackLayout Grid.Column="0" BackgroundColor="#313FA0" Grid.Row="0">
</StackLayout>
23
Atul Dhanuka

Vous pouvez ajouter un TapGestureRecognizer au StackLayout en XAML comme ceci:

<StackLayout Grid.Column="0" Grid.Row="0" BackgroundColor="#313FA0">
    <StackLayout.GestureRecognizers>
        <TapGestureRecognizer Tapped="OnTapped"/>
    </StackLayout.GestureRecognizers>
</StackLayout>

Ensuite, vous pouvez implémenter la méthode OnTapped dans le code derrière:

void OnTapped(object sender, EventArgs e) 
{
    // Do stuff
}

Alternativement, si vous utilisez le modèle MVVM et souhaitez lier le tap à une ICommand dans le ViewModel, cela peut être réalisé comme ceci:

<StackLayout Grid.Column="0" Grid.Row="0" BackgroundColor="#313FA0">
    <StackLayout.GestureRecognizers>
        <TapGestureRecognizer Command="{Binding TapCommand}"/>
    </StackLayout.GestureRecognizers>
</StackLayout>

Dans votre ViewModel, vous auriez:

ICommand tapCommand = new Command(OnTapped);

void OnTapped() 
{
    // Do stuff
}

Il existe de très bons guides sur le site Web de Xamarin:

http://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/gestures/#Using_Xaml

https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/gestures/tap/

50
pnavk

Eh bien, merci @ pnavk, selon ce que j'ai vu, permettez-moi également de partager cela, les vues (Layouts, Frame, Images etc) qui n'ont pas les événements OnClick ou Click intégrés ont la même manière de gérer l'événement Click.

comme suit:

Pour une image:

<Image>
   <Image.GestureRecognizers>
       <TapGestureRecognizer Tapped="onImageCitizenReporterTapped" NumberOfTapsRequired="1" />
   </Image.GestureRecognizers>
</Image>

Pour un cadre:

<Frame>
   <Frame.GestureRecognizers>
       <TapGestureRecognizer Tapped="onFrameCitizenReporterTapped" NumberOfTapsRequired="1" />
   </Frame.GestureRecognizers>
</Frame>

Pour StackLayout:

<StackLayout>
   <StackLayout.GestureRecognizers>
       <TapGestureRecognizer Tapped="onStackCitizenReporterTapped" NumberOfTapsRequired="1" />
   </StackLayout.GestureRecognizers>
</StackLayout >

Acclamations.

6