Xamarin页面弹出时光标自动定位至最后TextEdit,ScrollToAsync无效求助
解决方法
阻止TextEdit自动获取焦点
在页面初始化阶段,主动清除最后一个TextEdit的焦点:// 假设最后一个TextEdit的命名为lastTextEdit lastTextEdit.IsFocused = false;也可以在XAML中直接给该TextEdit添加
Focusable="False"属性,后续需要用户输入时再通过代码将其设为True。延迟执行滚动到顶部操作
由于页面渲染和焦点触发存在时序问题,直接调用ScrollToAsync可能失效,可通过Dispatcher延迟执行:await Dispatcher.DispatchAsync(async () => { await scrollView.ScrollToAsync(0, 0, ScrollToPosition.Start); }, DispatcherPriority.Background);设置初始焦点到非输入控件
在页面中添加一个不可见的可聚焦控件,将初始焦点转移过去,避免系统自动聚焦到TextEdit:<BoxView x:Name="dummyFocusTarget" IsVisible="False" Focusable="True" />然后在页面的
OnAppearing方法中设置焦点并滚动:protected override void OnAppearing() { base.OnAppearing(); dummyFocusTarget.Focus(); scrollView.ScrollToAsync(0, 0, ScrollToPosition.Start); }Android平台针对性调整
若问题出在Android端,可在AndroidManifest.xml对应的Activity标签中添加属性,避免软键盘触发滚动:android:windowSoftInputMode="adjustPan|stateHidden"
内容的提问来源于stack exchange,提问作者하하파파
相关产品推荐
相关产品推荐

