Xamarin Forms UWP Win10平板应用:点击第二个TextBox软键盘自动关闭问题求助
解决Xamarin Forms UWP平板上TextBox切换时软键盘自动收起的问题
这个问题我之前做Windows 10平板的Xamarin.Forms UWP应用时也踩过坑,核心是焦点切换时UWP的软键盘自动处理逻辑出了异常,给你几个实测有效的解决思路:
1. 自定义TextBox渲染器强制唤起键盘
在UWP项目中写一个自定义渲染器,接管TextBox的焦点事件,主动触发软键盘显示,从底层解决问题:
[assembly: ExportRenderer(typeof(TextBox), typeof(CustomTextBoxRenderer))] namespace YourAppNamespace.UWP.Renderers { public class CustomTextBoxRenderer : TextBoxRenderer { protected override void OnElementChanged(ElementChangedEventArgs<TextBox> e) { base.OnElementChanged(e); if (Control != null) { // 当控件获得焦点时,强制显示软键盘 Control.GotFocus += (sender, args) => { var inputPane = InputPane.GetForCurrentView(); _ = inputPane.TryShow(); }; } } } }
这个渲染器会作用于所有TextBox,每次焦点切换时主动请求显示软键盘,避免系统自动收起的问题。
2. 页面级焦点事件手动处理
如果不想全局修改,可以针对单个TextBox在页面里处理焦点事件,给系统一点缓冲时间再强制唤起键盘:
XAML代码
<TextBox x:Name="SecondRequiredTextBox" Placeholder="请输入第二项数据" Focused="SecondRequiredTextBox_Focused" />
后台代码
private async void SecondRequiredTextBox_Focused(object sender, FocusEventArgs e) { // 延迟100ms,让系统完成焦点切换的内部逻辑 await Task.Delay(100); var textBox = sender as TextBox; textBox?.Focus(); // 仅在UWP平台强制显示软键盘 if (Device.RuntimePlatform == Device.UWP) { var inputPane = Windows.UI.ViewManagement.InputPane.GetForCurrentView(); _ = inputPane.TryShow(); } }
3. 排查全局拦截逻辑
检查项目中有没有全局的InputPane监听、页面生命周期事件(比如Unloaded)或者自定义控件里的代码,可能存在意外调用InputPane.TryHide()的情况,这会导致软键盘被强制收起。
4. 更新依赖版本
老版本的Xamarin.Forms和UWP SDK存在平板软键盘的兼容性bug,尝试:
- 将Xamarin.Forms NuGet包更新到最新稳定版
- 把UWP项目的目标版本和最低版本设置为Windows 10 1903(10.0.18362.0)及以上
如果以上方法都没解决,注意检查页面布局是否嵌套了ScrollView——UWP的ScrollView在焦点切换时偶尔会干扰软键盘的状态,这时候可以尝试给ScrollView添加IsTabStop="False"属性,或者调整布局结构。
内容的提问来源于stack exchange,提问作者patrickL
相关产品推荐
相关产品推荐

