如果我翻译它的父视图,为什么我的部分视图变得不可点击?
Why do parts of my views become unclickable if I translate its parent?
使用 Xamarin.Forms
,我有一个 Grid
视图来布局一些数字,就像您在 phone.
上看到的一样
这是我用来创建 Grid
视图的代码以及我要插入其中的 Label
s。
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.
问题是,由于我在 Grid
视图上执行 TranslateY = 30
,它似乎弄乱了标签的可能点击区域。在我的设备上通过触摸发送大量短信后,可能的点击范围如下所示(不在绿色区域的底部标签不响应触摸):
如果我根本不翻译 Grid
视图,这些按钮就可以正常工作。
有谁知道为什么会这样,我能做些什么来阻止它?
我用 Xamarin.Forms
2.0.1.6505
尝试了上面的代码,即使在 Grid
对象上应用 Translation=30
并单击按钮(标签)。
尝试将您的 Xamarin.Forms
项目至少更新到 2.0.1.6505
然后重试,希望您不会遇到这个问题。
如果您仍然遇到问题,请问您要将 Grid
添加到哪个外部容器?我将其添加到一个简单的 StackLayout
中,没有遇到任何问题。
当您将项目更新到更高版本的 Xamarin.Forms
时,您还必须更改以下两行:-
XAlign = TextAlignment.Center,
YAlign = TextAlignment.Center,
以下内容,因为在 Xamarin.Forms
中做了一些调整:-
HorizontalTextAlignment = TextAlignment.Center,
VerticalTextAlignment = TextAlignment.Center,
使用 Xamarin.Forms
,我有一个 Grid
视图来布局一些数字,就像您在 phone.
这是我用来创建 Grid
视图的代码以及我要插入其中的 Label
s。
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.
问题是,由于我在 Grid
视图上执行 TranslateY = 30
,它似乎弄乱了标签的可能点击区域。在我的设备上通过触摸发送大量短信后,可能的点击范围如下所示(不在绿色区域的底部标签不响应触摸):
如果我根本不翻译 Grid
视图,这些按钮就可以正常工作。
有谁知道为什么会这样,我能做些什么来阻止它?
我用 Xamarin.Forms
2.0.1.6505
尝试了上面的代码,即使在 Grid
对象上应用 Translation=30
并单击按钮(标签)。
尝试将您的 Xamarin.Forms
项目至少更新到 2.0.1.6505
然后重试,希望您不会遇到这个问题。
如果您仍然遇到问题,请问您要将 Grid
添加到哪个外部容器?我将其添加到一个简单的 StackLayout
中,没有遇到任何问题。
当您将项目更新到更高版本的 Xamarin.Forms
时,您还必须更改以下两行:-
XAlign = TextAlignment.Center,
YAlign = TextAlignment.Center,
以下内容,因为在 Xamarin.Forms
中做了一些调整:-
HorizontalTextAlignment = TextAlignment.Center,
VerticalTextAlignment = TextAlignment.Center,