Подтвердить что ты не робот

Как добавить событие Click в Stack Layout или Frame

Я новичок в xamarin.forms, пожалуйста, помогите мне, как я могу добавить событие click в Stack Layout или Frame

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


<StackLayout Grid.Column="0" BackgroundColor="#313FA0" Grid.Row="0">
</StackLayout>
4b9b3361

Ответ 1

Вы можете добавить TapGestureRecognizer в StackLayout в XAML следующим образом:

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

Затем вы можете реализовать метод OnTapped в коде:

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

В качестве альтернативы, если вы используете шаблон MVVM и хотите привязать отвод к ICommand во ViewModel, это может быть достигнуто следующим образом:

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

В вашей ViewModel вы бы имели:

ICommand tapCommand = new Command(OnTapped);

void OnTapped() 
{
    // Do stuff
}

На сайте 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/

Ответ 2

Что ж, спасибо @pnavk, в соответствии с тем, что я видел, позвольте мне также поделиться этим, Представления (Макеты, Рамка, Изображения и т.д.), Которые не имеют встроенных событий OnClick или Click, имеют одинаковый способ решения события click.

Следующее :

Для изображения:

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

Для кадра:

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

Для StackLayout:

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

Приветствия.