Este es solo un ejemplo simplificado, pero estoy tratando de configurarlo para que cuando abra esta página en mi aplicación, lo primero que sucede es que el teclado aparece listo para que el usuario escriba su respuesta a una entrada. campo.
var namelabel = new Label { Text = "What is your name?" }; var nameentry = new Entry { Placeholder = "Type here..." }; var colorlabel = new Label { Text = "What's your fav color?" }; var colorentry = new Entry { Placeholder = "Type here..." }; Content = new StackLayout { Spacing = 15, Children = { namelabel, nameentry, colorlabel, colorentry } };¿Cómo puedo establecer el foco de la página en la primera entrada? Y además, después de que el usuario haya ingresado su primera entrada, ¿cómo podría configurar esto para que el usuario pueda presionar el botón "Siguiente" en el teclado (o algo por el estilo) y la aplicación lo llevará a completar el segunda entrada?
Utilice el método de Focus
nameentry.Focus(); Si desea que el foco se establezca cuando aparece su página, probablemente debería hacerlo en el método OnAppearing
protected override void OnAppearing () { base.OnAppearing (); nameentry.Focus(); }En uno de mis proyectos hice algo como esto. Por favor, intente el siguiente ejemplo:
public class EntryFocusBehavior : Behavior<Entry> { public string NextFocusElementName { get; set; } protected override void OnAttachedTo(Entry bindable) { base.OnAttachedTo(bindable); bindable.Completed += Bindable_Completed; } protected override void OnDetachingFrom(Entry bindable) { bindable.Completed -= Bindable_Completed; base.OnDetachingFrom(bindable); } private void Bindable_Completed(object sender, EventArgs e) { if (string.IsNullOrEmpty(NextFocusElementName)) return; var parent = ((Entry)sender).Parent; while (parent != null) { var nextFocusElement = parent.FindByName<Entry>(NextFocusElementName); if (nextFocusElement != null) { nextFocusElement.Focus(); break; } else { parent = parent.Parent; } } } }!!! Por favor, avíseme si cometí un error en el código.
Justo dentro de OnAppearing(), agregue el siguiente código,
protected async override void OnAppearing() { await Task.Run(() => { Task.Delay(100); Device.BeginInvokeOnMainThread(async () => { txtName.Focus(); }); }); }Nota: txtName es el nombre de referencia de su campo de entrada.