Xamarin.Forms TapGestureRecognizer在IOS上不起作用

时间:2018-07-02 11:06:47

标签: xamarin xamarin.forms

我有一个非常简单的Xamarin.Forms应用程序。它仅用于测试,目前仅在屏幕上不同的框被点击时显示消息。但是,点击手势无效。

这是我的XAML:

         

    <!-- Header -->
    <Label Text="My Company"
           TextColor="White"
           FontSize="Large"
           BackgroundColor="#a6192e"
           HorizontalTextAlignment="Center" />

    <!-- Body -->
    <FlexLayout FlexLayout.Grow="1">

        <!-- Content -->
        <BoxView
               BackgroundColor="#80225f"
               FlexLayout.Grow="1" />


            <Grid
                BackgroundColor="#80225f"
                Padding="20,50,50,20"
                RowSpacing="20"
                ColumnSpacing="20">
                <Grid.RowDefinitions>
                    <RowDefinition Height="300"/>
                    <RowDefinition Height="300"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="280"/>
                    <ColumnDefinition Width="280"/>
                    <ColumnDefinition Width="280"/>
                </Grid.ColumnDefinitions>

                <BoxView
                    x:Name="App1Box"
                    BackgroundColor="Silver"
                    Grid.Row="0"
                    Grid.Column="0"
                    HorizontalOptions="FillAndExpand"
                    VerticalOptions="FillAndExpand"/>
                <BoxView
                    BackgroundColor="Gray"
                    Grid.Row="0"
                    Grid.Column="0"
                    HeightRequest="60"
                    VerticalOptions="Start"/>

                <Label
                    Grid.Row="0"
                    Grid.Column="0"
                    HorizontalTextAlignment="Center"
                    TextColor="White"
                    FontSize="Large"
                    FontAttributes="Bold"
                    Margin="10">
                    App1</Label>

                <BoxView
                    x:Name="App2Box"
                    BackgroundColor="Silver"
                    Grid.Row="0"
                    Grid.Column="1"
                    HorizontalOptions="FillAndExpand"
                    VerticalOptions="FillAndExpand"/>
                <BoxView
                    BackgroundColor="Gray"
                    Grid.Row="0"
                    Grid.Column="1"
                    HeightRequest="60"
                    VerticalOptions="Start"/>

                <Label
                    Grid.Row="0"
                    Grid.Column="1"
                    HorizontalTextAlignment="Center"
                    TextColor="White"
                    FontSize="Large"
                    FontAttributes="Bold"
                    Margin="10">
                    App2</Label>

                <BoxView
                    x:Name="App3Box"
                    BackgroundColor="Silver"
                    Grid.Row="0"
                    Grid.Column="2"
                    HorizontalOptions="FillAndExpand"
                    VerticalOptions="FillAndExpand"/>
                <BoxView
                    BackgroundColor="Gray"
                    Grid.Row="0"
                    Grid.Column="2"
                    HeightRequest="60"
                    VerticalOptions="Start"/>

                <Label
                    Grid.Row="0"
                    Grid.Column="2"
                    HorizontalTextAlignment="Center"
                    TextColor="White"
                    FontSize="Large"
                    FontAttributes="Bold"
                    Margin="10">
                    App3</Label>

                <Button Grid.Row="1"
                        Grid.Column="0"
                        Text="Test Tap"
                        Clicked="OnMealsTapped"
                        WidthRequest="100"
                        HeightRequest="100"
                        BackgroundColor="Lime"
                        TextColor="Red"/>
            </Grid>

        <!-- Navigation items-->
        <BoxView FlexLayout.Basis="50"
                 FlexLayout.Order="-1"
                 Color="#80225f" />

        <!-- Aside items -->
        <BoxView FlexLayout.Basis="50"
                 Color="#80225f" />

    </FlexLayout>

    <!-- Footer -->
    <Label Text="Test App"
           FontSize="Large"
           BackgroundColor="Gray"
           HorizontalTextAlignment="Center" />
</FlexLayout>
</ContentPage.Content>

这是我的C#:

using System;
using System.Collections.Generic;

using Xamarin.Forms;

namespace TESTAPP
{
    public partial class MyPage : ContentPage
    {
        public MyPage()
        {
            InitializeComponent();

            var App1TapHandler = new TapGestureRecognizer();
            var App2TapHandler = new TapGestureRecognizer();
            var App3TapHandler = new TapGestureRecognizer();

            App1TapHandler.NumberOfTapsRequired = 1;
            App1TapHandler.Tapped += OnApp1Tapped;

            App2TapHandler.NumberOfTapsRequired = 1;
            App2TapHandler.Tapped += OnApp2Tapped;

            App3TapHandler.NumberOfTapsRequired = 1;
            App3TapHandler.Tapped += OnApp3Tapped;

            App1Box.GestureRecognizers.Add(App1BoxTapHandler);
            App2Box.GestureRecognizers.Add(App2BoxTapHandler);
            App3Box.GestureRecognizers.Add(App3BoxTapHandler);
        }

        private void OnApp1Tapped(object sender, EventArgs e)
        {
            DisplayAlert("App1","Lets use App1","OK");
        }

        private void OnApp2Tapped(object sender, EventArgs e)
        {
            DisplayAlert("App2", "Lets use App2", "OK");
        }

        private void OnApp3Tapped(object sender, EventArgs e)
        {
            DisplayAlert("App3", "Lets use App3", "OK");
        }
    }
}

按钮在那里进行测试。当点击按钮时,我会收到测试警报消息。点击任何BoxView都不会发生任何事情。

那为什么不起作用?

2 个答案:

答案 0 :(得分:3)

您的问题与TapGesture无关,但是您有2个Boxview重叠。

因此,您必须在未收到任何输入的BoxView中添加InputTransparent

            <BoxView
                x:Name="App1Box"
                BackgroundColor="Silver"
                Grid.Row="0"
                Grid.Column="0"
                HorizontalOptions="FillAndExpand"
                VerticalOptions="FillAndExpand"/>
            <BoxView 
                InputTransparent="true"  <!-- Here -->
                BackgroundColor="Gray"
                Grid.Row="0"
                Grid.Column="0"
                HeightRequest="60"
                VerticalOptions="Start"/>

重复其余部分。

答案 1 :(得分:0)

尝试在主线程的事件处理程序中调用代码。

Device.BeginInvokeOnMainThread(() => 
{
     //Run the code here.
});