Xamarin android 从 Picker 到 Entry 的焦点更改不会打开键盘

Xamarin android focus change from Picker to Entry does not open Keyboard

我有一堆条目和选择器,我希望焦点自动切换到下一个 Entry/Picker。 我通过在 Entry/Picker 上调用 Focus() 方法来做到这一点。如果我当前的焦点在一个 Entry 上,而我的下一个元素是一个 Entry 或一个 Picker,它会改变焦点并按预期打开 Keyboard/Pickerdialog。如果我当前的焦点在 Picker 上,而下一个元素是 Entry,那么 Entry 会按预期获得焦点,但键盘不会打开。 在 Pickers SelectedIndexChanged 事件中调用 focus() 方法。 我该如何解决?

xaml代码:

<?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:d="http://xamarin.com/schemas/2014/forms/design"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         mc:Ignorable="d"
         x:Class="ABM.Ablesegeraet.Views.TourenLadenPage"
         Title="Touren laden">
<ContentPage.Content>
    <StackLayout>
    <Label Grid.Row="0" Grid.Column="0" Margin="30,10,0,0" FontSize="Medium" Text="Mandant:"/>
    <Picker x:Name="MandantenPicker" ItemDisplayBinding="{Binding Ort}" Title="Mandant" Grid.Row="0" Grid.Column="1" SelectedIndexChanged="MandantPicker_SelectedIndexChanged"/>
    <Entry Grid.Row="1" x:Name="test"/>
    </StackLayout>
</ContentPage.Content>

SelectedIndexcChanged:

private void MandantPicker_SelectedIndexChanged(object sender, EventArgs e)
    {
        test.Focus();
    }

在Picker的SelectedIndexChanged方法中Picker没有失去焦点,以后如果设置Entry.Focus会导致显示错误

解决办法是SelectedIndexChanged方法运行后Picker失去焦点,然后设置Entry.Focus才能正确显示。

使用Task开启新线程完成本次操作。

这里是背景代码:

public partial class MainPage : ContentPage
{   
    public MainPage()
    {
        InitializeComponent();
    }
    private async void picker_SelectedIndexChanged(object sender, EventArgs e)
    {
        var a = picker.IsFocused;
        string res = (sender as Picker).SelectedItem.ToString();
        Task.Run(()=> myTask(res));//Create and start the thread
    }

    private void myTask(string res)
    {
        Thread.Sleep(300);
        var a = picker.IsFocused;
        if (res == "Test1")
        {
            entry1.Focus();
        }
        if (res == "Test2")
        {
            entry2.Focus();
        }    
    }
}