历史上发生过这样的情况,必须使用文本框来输入用户名和密码。如何正确组织密码文本字段中的字符替换。我草拟了代码。
public class TextToPasswordCharConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var str = new string('*', value?.ToString().Length ?? 0);
return str;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
//throw new NotImplementedException();
return new object();
}
}
视图模型中的密码属性
public string PasswordField
{
get => passwordValue;
set
{
passwordValue = value;
OnPropertyChanged();
}
}
观察者
public abstract class NotificationObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
protected void SetField<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
{
if (!EqualityComparer<T>.Default.Equals(field, value))
{
field = value;
OnPropertyChanged(propertyName);
}
}
}
标记
<TextBox Grid.Row="0" Grid.Column="0" TextWrapping="Wrap" Margin="140,174,30,10">
<TextBox.Text>
<Binding Path="PasswordField" ValidatesOnDataErrors="True" Converter="{StaticResource TextToPasswordCharConverter}" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
该代码有效,但问题是我不知道如何正确实现转换器。现在,当输入一个字符时,他在字段“ ”中一次写了 13 个字符,并且无法使用退格键删除它们。输入字符时,必须始终在文本字段中打印字符“ ”,并具有擦除它的能力。
让它更容易一些。下载字体 passdot.ttf。我将它添加到应用程序资源中,在标记中连接它,
我禁止复制、剪切和粘贴的地方。
到目前为止,为了测试,我已经在视图中抛出了一个事件,之后我将用命令替换它。
我还没有打扰密码框。接下来,我将对字段中的字符串进行哈希处理。什么不会将文本存储在内存中。