使用Xamarin.Forms
,我有一个Grid
视图来布局一些您在手机上看到的数字。
以下是我用来创建Grid
视图的代码以及我插入的Label
。
pinNumberGrid = new Grid {
ColumnSpacing = 10,
RowSpacing = 10,
TranslationY = 30,
HorizontalOptions = LayoutOptions.CenterAndExpand,
VerticalOptions = LayoutOptions.CenterAndExpand,
RowDefinitions = {
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto }
},
ColumnDefinitions = {
new ColumnDefinition { Width = GridLength.Auto },
new ColumnDefinition { Width = GridLength.Auto },
new ColumnDefinition { Width = GridLength.Auto }
}
};
readonly Dictionary<string, string> pinNumbers = new Dictionary<string, string> {
{ "1", "1" }, { "2", "2" }, { "3", "3" },
{ "4", "4" }, { "5", "5" }, { "6", "6" },
{ "7", "7" }, { "8", "8" }, { "9", "9" },
{ "a", "a" }, { "0", "0" }, { "b", "b" }
};
int x = 0;
int y = 0;
var tapListener = new TapGestureRecognizer();
tapListener.Tapped += (sender, e) =>
{
var numberHit = (sender as Label).Text;
textEntry.Text += numberHit;
};
foreach (KeyValuePair<string, string> pinKey in pinNumbers)
{
var number = new Label {
Text = pinKey.Value,
TextColor = Color.White,
FontSize = 35,
WidthRequest = 70,
HeightRequest = 70,
XAlign = TextAlignment.Center,
YAlign = TextAlignment.Center,
InputTransparent = false,
BackgroundColor = Color.Gray
};
number.GestureRecognizers.Add(tapListener);
pinNumberGrid.Children.Add(number, x, y);
x++;
if (x >= 3)
{
x = 0;
y++;
}
}
一切都在正确布局。如您所见,我正在为每个标签添加TapGestureRecognizer
。这段代码肯定有效,因为我在那里放了一个 Debug.Log ,我得到了我期望的 Application Output 。
问题在于,由于我在TranslateY = 30
视图上执行了Grid
,因此标签的可能点击区域似乎很糟糕。在我的设备上进行了大量的短信发送之后,可能的点击范围就是这样(绿色区域中没有的底部标签不会触摸):
如果我根本不翻译Grid
视图,按钮就能完美运行。
有谁知道为什么会这样,我能做些什么来阻止它?
答案 0 :(得分:1)
我使用Xamarin.Forms
2.0.1.6505
尝试了上面的代码,即使在Translation=30
对象上应用Grid
并单击按钮的下半部分也没有问题(标签)。
尝试将Xamarin.Forms
项目更新为至少2.0.1.6505
并重试,希望您不会遇到此问题。
如果您仍然遇到问题,您要将Grid
添加到哪个外部容器?我将其添加到一个简单的StackLayout
中,并且没有遇到任何问题。
当您将项目更新为更高版本的Xamarin.Forms
时,您还必须更改以下两行: -
XAlign = TextAlignment.Center,
YAlign = TextAlignment.Center,
以下内容,因为在Xamarin.Forms
中进行了一些调整: -
HorizontalTextAlignment = TextAlignment.Center,
VerticalTextAlignment = TextAlignment.Center,