为重现该问题,我在内容页面上添加了2个控件:Picker and Entry。容器是一个TableView部分。
如果我单击Entry控件,导致键盘打开或在其中输入字符,则Picker选择项将打开。每当我输入一个字符或删除一个字符时,它就会打开(因此当值更改时)。
如果主容器不是TableView,而是例如StackLayout,那么我就没有这个问题。
自Xamarin Forms v3.3起,我遇到了这个问题。在3.2之前的版本中,此问题不存在。该问题在3.4 beta中也存在。
此外:该问题仅发生在Android(版本4-9)中。不在iOS中。
下面您会找到我的代码:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:PickerBugXF33"
x:Class="PickerBugXF33.MainPage">
<StackLayout>
<TableView x:Name="testTableView" Intent="Form" HasUnevenRows="true" />
</StackLayout>
</ContentPage>
后面的代码:
using Xamarin.Forms;
namespace PickerBugXF33
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
testTableView.Root = new TableRoot();
var section = new TableSection("Test section");
testTableView.Root.Add(section);
var viewCell = new ViewCell();
section.Add(viewCell);
var stack = new StackLayout() { Orientation = StackOrientation.Vertical };
viewCell.View = stack;
var picker = new Picker();
picker.Items.Add("Test item in picker");
stack.Children.Add(picker);
var entry = new Entry();
stack.Children.Add(entry);
}
}
}
NB:这是一个测试项目。实际的实时项目要大得多,其中必须通过代码创建页面。
更新1,11/9/2018:可以通过提交https://github.com/xamarin/Xamarin.Forms/pull/4344/commits/8401d81745ad248b5b70aa669863c8b8c8753e66
解决