如何将单击处理程序添加到xamarin表单中的内容页面

Joh*_*han 3 xamarin xamarin.forms

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

我在WinPhone应用程序中创建了类似的功能,我可以通过PhoneApplicationPage上的OnLeftMouseButtonDown解决我的问题,但我在ContentPage中找不到合适的对应物.有什么建议?

Pet*_*ete 5

为了得到这个工作,你有一个添加布局ContentPage,因为你将要指定一些内容,并设置Horizo​​ntalOptionsVerticalOptionsLayoutOptions.FillAndExpand.

尽管如此,这还不足以正确处理水龙头.

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

然后,您必须将TapGestureRecognizer附加到ContentPage,以捕获所做的点击.

虽然我在下面的测试中适用于标签按钮,但仍然在两种类型上都接收了TapPestures for WindowsPhone,以及按钮点击事件触发 - 这不适用于Android - 因为按钮单击将阻止TapGesture事件触发.

另一种选择是尝试在所有东西的顶部放置一个" 隐形 " 网格.但是,这种方法的问题在于,您将松开Click事件处理程序,无法使用WindowsPhone触发,还会松开Click事件处理程序,无法使用Android触发.虽然好的部分是你可以在任何地方检测到一个点击,但不能通过它.这取决于你在一天结束时想要实现的目标.

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);
Run Code Online (Sandbox Code Playgroud)