You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin.Forms应用:Windows 10 Mobile中KeyboardFlags.None不生效如何修复?

修复Windows 10 Mobile上Entry控件KeyboardFlags.None不生效的问题

这个问题我之前做Xamarin.Forms项目时也碰到过,Win10 Mobile的UWP控件对KeyboardFlags.None的处理确实有特殊情况,默认的平台映射没有完全禁用拼写检查功能。这里给你两个可行的修复方案:

方案一:自定义Entry渲染器(推荐)

通过自定义UWP平台的Entry渲染器,直接操作原生TextBox控件来关闭拼写检查和自动更正:

  1. 在共享项目中创建自定义Entry类
using Xamarin.Forms;

namespace YourAppName
{
    // 自定义Entry,用于标记需要禁用拼写检查的输入框
    public class NoSpellCheckEntry : Entry
    {
    }
}
  1. 在UWP项目中实现渲染器
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using YourAppName;
using YourAppName.UWP;
using Xamarin.Forms;
using Xamarin.Forms.Platform.UWP;

[assembly: ExportRenderer(typeof(NoSpellCheckEntry), typeof(NoSpellCheckEntryRenderer))]
namespace YourAppName.UWP
{
    public class NoSpellCheckEntryRenderer : EntryRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                // 直接禁用拼写检查功能
                SpellCheck.IsEnabled = false;
                
                // 关闭自动更正的建议列表
                var autoSuggestBox = Control.FindDescendant<AutoSuggestBox>();
                if (autoSuggestBox != null)
                {
                    autoSuggestBox.IsSuggestionListOpen = false;
                    autoSuggestBox.TextMemberPath = string.Empty;
                }

                // 设置InputScope为普通文本,避免默认类型带来的额外处理
                Control.InputScope = new InputScope();
                var scopeName = new InputScopeName
                {
                    NameValue = InputScopeNameValue.Text
                };
                Control.InputScope.Names.Add(scopeName);
            }
        }
    }
}
  1. 在XAML中使用自定义Entry
    把原来的Entry替换成local:NoSpellCheckEntry,并保持KeyboardFlags="None"的设置即可:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:YourAppName"
             x:Class="YourAppName.YourPage">
    <StackLayout>
        <local:NoSpellCheckEntry KeyboardFlags="None" Placeholder="输入内容无自动纠错"/>
    </StackLayout>
</ContentPage>

方案二:直接修改UWP原生控件属性(临时应急)

如果不想创建自定义渲染器,也可以在UWP项目的XAML中找到对应Entry的原生TextBox,手动关闭拼写检查:

注意:这种方法只适合单个页面的单个控件,复用性较差

<!-- 在UWP项目的页面XAML中 -->
<forms:EntryRenderer>
    <TextBox SpellCheck.IsEnabled="False" InputScope="Text"/>
</forms:EntryRenderer>

为什么会出现这个问题?

Win10 Mobile的UWP控件默认启用了拼写检查和自动更正,而Xamarin.Forms的KeyboardFlags.None在映射到UWP平台时,没有完全覆盖这些原生控件的默认设置,导致自动纠错功能依然生效。通过自定义渲染器直接操作原生控件,可以彻底禁用这些功能。

内容的提问来源于stack exchange,提问作者ispiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:35:48