我是Xamarin.Forms的新手,正在尝试向我的内容页面添加点击事件。我希望在用户点击页面时启动一个事件,无论在哪里。
我在WinPhone应用程序中创建了类似的功能,我可以通过PhoneApplicationPage上的OnLeftMouseButtonDown解决我的问题,但我在ContentPage中找不到合适的对应物。有什么建议吗?
答案 0 :(得分:5)
为了实现这一目标,您必须在 ContentPage 中添加布局,因为您需要指定一些内容,并设置 HorizontalOptions < / strong>和 VerticalOptions 到 LayoutOptions.FillAndExpand 。
尽管如此,这还不足以正确处理水龙头。
您还需要为布局指定 BackgroundColor 。我将我设置为 Color.Transparent 。如果您在未指定颜色的情况下尝试,则不。
然后,您必须将 TapGestureRecognizer 附加到 ContentPage ,以便捕获所做的点击。
虽然我在下面的测试中适用于标签和按钮,但仍然会收到 TapPestures WindowsPhone 两种类型,以及按钮点击事件触发 - 这不适用于 Android - 因为按钮点击将阻止 TapGesture 事件从射击。
另一种选择是尝试使用&#39; 隐藏&#39; 网格超越一切。但是,这种方法的问题在于,您将使用 WindowsPhone 来解除点击事件处理程序,并且还会松开单击事件处理程序的的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);