【问题标题】:How to add a click handler to content page in xamarin forms如何在 xamarin 表单中向内容页面添加点击处理程序
【发布时间】:2014-10-26 04:57:49
【问题描述】:

我是 Xamarin.Forms 的新手,正在尝试将点击事件添加到我的内容页面。我希望在用户点击页面时开始一个事件,无论在哪里。

我在 WinPhone 应用程序中创建了类似的功能,我可以使用 PhoneApplicationPage 上提供的 OnLeftMouseButtonDown 解决我的问题,但我在 ContentPage 中找不到合适的对应项。有什么建议吗?

【问题讨论】:

    标签: xamarin xamarin.forms


    【解决方案1】:

    为了让这个工作你必须添加一个 LayoutContentPage,因为你需要指定一些内容,并设置 Horizo​​ntalOptions 和 VerticalOptionsLayoutOptions.FillAndExpand

    但这还不足以正确处理水龙头。

    您还需要为 Layout 指定 BackgroundColor。我将我的设置为 Color.Transparent。如果您尝试不指定颜色,它不起作用

    然后,您必须将 TapGestureRecognizer 附加到 ContentPage 以捕捉点击。

    虽然在我下面的测试中这与 LabelsButtons 配合得很好,但仍然会收到 WindowsPhoneTapGestures在这两种类型上,以及 Button click 事件触发 - 这不适用于 Android - 因为 Button 点击会阻止 TapGesture 事件从射击。

    另一种选择是尝试在所有内容的顶部放置一个“invisibleGrid。然而,这种方法的问题在于,您将无法使用 WindowsPhone 触发 Click 事件处理程序,并且还会导致无法触发 Click 事件处理程序安卓。不过,好的部分是您可以在任何地方检测到点击,尽管不会传递它。这仅取决于您最终要达到的目标。

    StackLayout objStackLayout = new StackLayout()
    {
        Orientation = StackOrientation.Horizontal,
        HorizontalOptions = LayoutOptions.FillAndExpand,
        VerticalOptions = LayoutOptions.FillAndExpand,
        BackgroundColor = Color.Transparent
    };
    //
    Label objLabel1 = new Label();
    objLabel1.BackgroundColor = Color.Red;
    objLabel1.Text = "label1";
    objLabel1.HorizontalOptions = LayoutOptions.Start;
    objLabel1.VerticalOptions = LayoutOptions.Start;
    objLabel1.WidthRequest = 100;
    objLabel1.HeightRequest = 300;
    objStackLayout.Children.Add(objLabel1);
    //
    Label objLabel2 = new Label();
    objLabel2.BackgroundColor = Color.Green;
    objLabel2.Text = "label2";
    objLabel2.Font = Font.OfSize("Arial", 48);
    objLabel2.WidthRequest = 100;
    objLabel2.HeightRequest = 300;
    objStackLayout.Children.Add(objLabel2);
    //
    Button objButton1 = new Button();
    objButton1.Text = "Click Me";
    objButton1.WidthRequest = 300;
    objButton1.HeightRequest = 300;
    objStackLayout.Children.Add(objButton1);
    //
    this.Content = objStackLayout;
    
    
    TapGestureRecognizer objTapGestureRecognizer1 = new TapGestureRecognizer();
    objTapGestureRecognizer1.Tapped += ((o2, e2) =>
        {
            System.Diagnostics.Debug.WriteLine("Clicked!");
        });
    
    this.Content.GestureRecognizers.Add(objTapGestureRecognizer1);
    

    【讨论】:

    • 它适用于带有按钮的 WindowsPhone - 但不适用于 Android。
    • 感谢您的出色回复,这正是我想要的!
    • 我已经用一些新的发现更新了我的答案作为替代方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 2016-10-03
    • 2018-03-28
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    相关资源
    最近更新 更多