не работает маскирующий пароль в формах Xamarin - PullRequest
1 голос
/ 26 февраля 2020

Я хотел бы частично замаскировать поле пароля от точки до звездочки. Я пытался использовать конвертер, но он не работает. Каков наилучший способ достичь этого в формах ксамарина.

     <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;
       }
    }

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

Если вы хотите использовать 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));
        }
    }
}

IValueConverter:

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();
    }
}

Это скриншот:

enter image description here

Но я все же предлагаю вам использовать пользовательский рендер для маскировки пароля используя звездочку, вот пример этого, вы можете посмотреть:

Как изменить символ маскирования пароля в формах Xamarin - Запись

0 голосов
/ 27 февраля 2020

Я предлагаю вам использовать поведение для этого. Вы можете узнать больше о поведении форм Xamarin здесь

Больше примеров здесь

Надеюсь, это поможет.

...