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

Xamarin.Forms消除密码输入延迟:保留原密码实现即时掩码

解决Xamarin.Forms密码输入延迟并保留原密码的方案

你的核心问题是自定义控件时直接替换Text属性导致真实密码丢失,只需额外存储真实密码,同时在界面显示掩码即可实现即时无延迟的密码输入效果:

  1. 修改自定义NoDelayEntry控件,添加私有字段存储真实密码,同时处理输入和删除逻辑:
class NoDelayEntry : Entry
{
    private string _realPassword = string.Empty;
    
    // 提供获取真实密码的公共属性
    public string RealPassword => _realPassword;

    public NoDelayEntry() : base()
    {
        // 关闭原生密码延迟掩码
        this.IsPassword = false;
        this.TextChanged += OnEntryTextChanged;
    }

    private void OnEntryTextChanged(object sender, TextChangedEventArgs e)
    {
        // 处理输入:新文本长度更长,说明输入了字符
        if (e.NewTextValue.Length > e.OldTextValue.Length)
        {
            // 获取新增的字符(取新文本最后一位)
            var newChar = e.NewTextValue[^1];
            _realPassword += newChar;
        }
        // 处理删除:新文本长度更短,说明删除了字符
        else if (e.NewTextValue.Length < e.OldTextValue.Length && _realPassword.Length > 0)
        {
            _realPassword = _realPassword.Substring(0, _realPassword.Length - 1);
        }

        // 界面显示掩码,避免触发重复TextChanged事件,先移除事件再赋值
        this.TextChanged -= OnEntryTextChanged;
        this.Text = new string('●', _realPassword.Length);
        this.TextChanged += OnEntryTextChanged;
    }
}
  1. XAML使用方式不变:
<local:NoDelayEntry x:Name="passwordEntry" Placeholder="Password" />
  1. 登录时获取真实密码:
// 直接通过RealPassword属性获取用户输入的真实密码
var inputPassword = passwordEntry.RealPassword;
// 后续执行登录逻辑

注意点:

  • 关闭原生IsPassword属性,避免原生的延迟掩码逻辑干扰
  • 修改Text时先移除TextChanged事件,防止触发无限循环
  • 区分输入和删除操作,正确维护真实密码的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:22:36