如果我翻译它的父视图,为什么我的部分视图变得不可点击?

Why do parts of my views become unclickable if I translate its parent?

使用 Xamarin.Forms,我有一个 Grid 视图来布局一些数字,就像您在 phone.

上看到的一样

这是我用来创建 Grid 视图的代码以及我要插入其中的 Labels。

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,