Search code examples
xamlxamarineventstouchgesture

Different TapGestureRecognizer for each row


<ContentView>
    <Grid InputTransparent="True">
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>

        <StackLayout Spacing="0"
                 Grid.Row="0"
                 VerticalOptions="Center">
            <Label Text="Algebra"/>
            <Label Text="number 1" />
        </StackLayout>
        <Switch IsToggled="True"
            VerticalOptions="Center"
                Grid.Row="1"
            Grid.Column="1"
                />

        <StackLayout Spacing="0"
                 Grid.Row="1"
                 VerticalOptions="Center">
            <Label Text="Arithmetics" />
            <Label Text="number 2" />
        </StackLayout>
        <Switch IsToggled="True"
            VerticalOptions="Center"
            Grid.Column="1"
                />
    </Grid>
</ContentView>

I have two rows with each having 2 labels and a switch. How can I invoke two different Tap events, for each row. Something like this:

<ROW1?.GestureRecognizers>
            <TapGestureRecognizer Tapped="OnTapped1" />
        </ROW?.GestureRecognizers>


<ROW2?.GestureRecognizers>
            <TapGestureRecognizer Tapped="OnTapped2" />
        </ROW?.GestureRecognizers>

I'm new, but it seems Switch toggle doesn't work while in grid, which is strange.

UI image: UI


Solution

  • Since you can't simply apply a gesture to an entire grid row,

    I decided to just use Switch built-in functionality for my UI.

    And all I did was add two different methods for each Switch:

    <Grid InputTransparent="True">
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>
    
        <StackLayout Spacing="0"
                 Grid.Row="0"
                 VerticalOptions="Center">
            <Label Text="Algebra"/>
            <Label Text="number 1" />
        </StackLayout>
        <Switch IsToggled="True"
                Toggled="method2"
            VerticalOptions="Center"
                Grid.Row="1"
            Grid.Column="1"
                />
    
        <StackLayout Spacing="0"
                 Grid.Row="1"
                 VerticalOptions="Center">
            <Label Text="Arithmetics" />
            <Label Text="number 2" />
        </StackLayout>
        <Switch IsToggled="True"
            Toggled="method2"
            VerticalOptions="Center"
            Grid.Column="1"
                />
    </Grid>