xamarin/Xamarin.Forms

[XForms] If parent and child element have gestures , Then child element gesture only fired. Parent element gesture not fired

Aperta

#6625 aperta il 21 giu 2019

 (4 commenti) (0 reazioni) (0 assegnatari)C# (1926 fork)batch import
a/gestures 🖖e/7 :clock7:help wantedpartnert/bug :bug:up-for-grabs

Metriche repository

Star
 (5644 stelle)
Metriche merge PR
 (Nessuna PR mergiata in 30 g)

Descrizione

Description

If parent and child element have gestures , Then child element gesture only fired. Parent element gesture not fired for all platforms (UWP, Android and IOS)

<local:GridExt x:Name="ListView" BackgroundColor="AntiqueWhite">
        <local:GridExt.GestureRecognizers>
            <TapGestureRecognizer Tapped="TapGestureRecognizer_Tapped"/>
        </local:GridExt.GestureRecognizers>
        <ScrollView>
            <StackLayout>
                <local:ContentViewExt x:Name="ListViewItemGrid">
                    <local:ContentViewExt.GestureRecognizers>
                        <TapGestureRecognizer Tapped="TapGestureRecognizer_Tapped_1"/>
                    </local:ContentViewExt.GestureRecognizers>
                    <Label x:Name="Item" FontSize="Large" Text="ItemTemplate" VerticalTextAlignment="Center" HorizontalTextAlignment="Center" HeightRequest="100" BackgroundColor="Gray"/>
                </local:ContentViewExt>
            </StackLayout>
        </ScrollView>
    </local:GridExt>
public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void TapGestureRecognizer_Tapped(object sender, EventArgs e)
        {
            //DisplayAlert("ListView", "ListViewTappedFired", "Ok");
            Debug.WriteLine("ListViewTappedFired");
        }

        private void TapGestureRecognizer_Tapped_1(object sender, EventArgs e)
        {
            //DisplayAlert("Item", "ItemTappedFired", "Ok");
            Debug.WriteLine("ItemTappedFired");
        }
    }

    public partial class GridExt : Grid
    {

    }

    public partial class ContentViewExt : ContentView
    {

    }

Steps to Reproduce

  1. Run the Sample
  2. Tap the Label
  3. Note: ContentView gesture only fired, Grid gesture not fired.

Expected Behavior

I need child gesture fired and parent gesture fired. Give me any workaround. Note : I am find the android workaround, Thats worked for me. But I need uwp and ios also

Android render file

public class GridExtRenderer : ViewRenderer<GridExt, Views.View>
    {
        public GridExtRenderer(Context context) : base(context)
        {
        }

        public override bool OnInterceptTouchEvent(Views.MotionEvent ev)
        {
            OnTouchEvent(ev);
            return base.OnInterceptTouchEvent(ev);
        }
    }

Actual Behavior

If child element have gesture then parent gesture not fired.

Basic Information

  • Version with issue: latest 4.0
  • Last known good version: No
  • IDE: Visual Studio 2017
  • Nuget Packages: latest XF version 4.0
  • Affected Devices: All

Reproduction Link

https://www.syncfusion.com/downloads/support/directtrac/general/ze/TouchTest876899649

Guida contributor