我有一堆條目和選擇器,我希望焦點自動更改為下一個條目/選擇器。我通過在我想要關注的條目/選擇器上呼叫 Focus() 方法來做到這一點。如果我當前的焦點在一個條目上,而我的下一個元素是一個條目或一個選擇器,它會更改焦點并按預期打開鍵盤/選擇器對話框。如果我當前的焦點是 Picker 而下一個元素是 Entry 則 Entry 會按預期獲得焦點,但鍵盤不會打開。在 Pickers SelectedIndexChanged 事件中呼叫 focus() 方法。我該如何解決?
xml代碼:
<?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();
}
uj5u.com熱心網友回復:
Picker在Picker的SelectedIndexChanged方法中沒有失去焦點,然后如果設定了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();
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/375406.html
標籤:沙马林 xamarin.forms 安卓系统
