【问题标题】:masking password character in Xamarin forms is not workingXamarin 表单中的屏蔽密码字符不起作用
【发布时间】:2020-02-26 20:39:15
【问题描述】:

我想将密码字段从点部分屏蔽为星号。我尝试使用转换器,但它不起作用。以 xamarin 形式实现这一目标的最佳方法是什么。

     <Entry IsPassword="True"
            Placeholder="password"
            Text="{Binding Password.Value, Mode=TwoWay, Converter={StaticResource 
            MaskedPasswordConverter}}"
            MaxLength="6">

     public class MaskedPasswordConverter : IValueConverter
     {

       private string _value;
       public object Convert(object value, Type targetType, object parameter, CultureInfo 
       culture)
       {
         var str = (value ?? "").ToString();
         _value = str;
         var maskedStr = "";
         if (!string.IsNullOrEmpty(str) && str.Length > 2)
         {
            var domainStr = str.IndexOf('@');
            var lengthOfMask = domainStr - 2;

            maskedStr = str.Substring(0, 2) + new string('*', lengthOfMask) + 
            str.Substring(domainStr);
         }
         return maskedStr;
       }

       public object ConvertBack(object value, Type targetType, object parameter, 
       CultureInfo culture)
       {
         return value;
       }
    }

【问题讨论】:

  • 你需要使用自定义渲染器
  • 如果您尝试使用 IsPassword = "False"?你正在制作自己的面具
  • @AlexanderRojas 还是不行

标签: xamarin xamarin.forms xamarin.android xamarin.ios


【解决方案1】:

我建议您为此使用行为。 您可以了解有关 Xamarin 表单行为的更多信息here

更多例子here

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    如果你想用IValueConverter用星号屏蔽部分密码,我想你可以将绑定模式设置为OneWay,那么请确认你的密码中有@字符。

    我建议你可以用这种方式来屏蔽电子邮件,不要屏蔽密码,但你仍然想做,这是你可以看看的示例:

     <Entry
                MaxLength="6"
                Placeholder="password"
                Text="{Binding password, Mode=OneWay, Converter={StaticResource converter1}}" />
    
    public partial class Page24 : ContentPage, INotifyPropertyChanged
    {
        private string _password;
        public string password
        {
            get
            { return _password; }
            set
            {
                _password = value;
                RaisePropertyChanged("password");               
            }
        }
        public Page24()
        {
            InitializeComponent();
    
            password = "123@56";
            this.BindingContext = this;
        }
    
    
        public event PropertyChangedEventHandler PropertyChanged;      
        public void RaisePropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
    

    IValue 转换器:

    public class Passwordconverter : IValueConverter
    {      
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var str = (value ?? "").ToString();
    
            var maskedStr = "";
            if (!string.IsNullOrEmpty(str) && str.Length > 2)
            {
                var domainStr = str.IndexOf('@');
                var lengthOfMask = domainStr - 2;
    
                maskedStr = str.Substring(0, 2) + new string('*', lengthOfMask) + str.Substring(domainStr);
            }
            return maskedStr;
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
    

    这是截图:

    但我仍然建议你可以使用自定义渲染来使用星号来掩盖你的密码,这是关于这个的示例,你可以看看:

    How to change password masking character in Xamarin forms - Entry

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 1970-01-01
      • 2011-06-04
      • 2018-04-25
      • 2012-07-25
      • 1970-01-01
      相关资源
      最近更新 更多