C# WPF从CodeBehind设置密码箱
我有一个C# WPF从CodeBehind设置密码箱,c#,wpf,C#,Wpf,我有一个密码箱,但是如果用户输入了太多的字符,或者输入了他们不应该输入的字符,或者其他第三件事,我需要进行更改,就像从未发生过一样。e、 g:最大长度为5,但输入5个字符后,用户输入第6个字符。我想删除第6个字符 我已经找了几个小时了,但我找到的最接近的东西是。答案的第一行是,“你不能。”如果事情就是这样,那就这样吧。然而,对我来说,感觉必须有办法做到这一点 我试过很多方法,但都没有用PasswordBox没有像TextBox那样的Undo方法。尝试保留DependencyProperty,并使
密码箱
,但是如果用户输入了太多的字符,或者输入了他们不应该输入的字符,或者其他第三件事,我需要进行更改,就像从未发生过一样。e、 g:最大长度为5,但输入5个字符后,用户输入第6个字符。我想删除第6个字符
我已经找了几个小时了,但我找到的最接近的东西是。答案的第一行是,“你不能。”如果事情就是这样,那就这样吧。然而,对我来说,感觉必须有办法做到这一点
我试过很多方法,但都没有用PasswordBox
没有像TextBox那样的Undo
方法。尝试保留DependencyProperty
,并使用OnDPChanged,在给定e.OldValue
的情况下重置DP,但这与密码框是分开的。我甚至想保留一个m_oldPassword
变量,但正如链接的帖子所说,“你不能。”
从理论上讲,我可以做一些类似的事情:MyPasswordBox.Password=MyPasswordBox.Password.SubString(0,passLen-1)代码1,但我不想为了安全原因而暴露正常字符串,2,它不会总是最后一个字符,这是问题,用户可以在中间输入一些东西。
官方问题:如何在我的codebehind中使用SecureString
重置PasswordBox
?
(注意:我没有任何代码要显示,因为目前大多数/所有这些都是理论上的)PasswordBox支持MaxLength属性来限制字符数,还支持KeyDown事件,您可以在代码中设置规则 XAML 最后,虽然不能直接设置SecurePassword属性,但可以设置Password属性。我知道您不希望在应用程序中将密码作为纯文本。因此,请使用加密值和写入逻辑来解密该值并将其分配给Password属性
private void ResetButton_OnClick(object sender, RoutedEventArgs e)
{
PasswordBox.Clear();
PasswordBox.Password = DecryptSavedPassword(_encryptedPassword);
}
为什么你需要这个,而其他人却不需要?你能重新表述一下这个问题吗?恐怕我不太明白你在问什么。我的意思是,如果其他人不抱怨控制,你为什么要这样做?如果你想要一个特殊的控件,那么就创建你自己的客户控件。我不是在抱怨它,我是在问一个关于如何使用它或如何解决它的问题。为什么你不使用MVVM?这可能会有帮助,我会看看我能用它做些什么。谢谢
public partial class MainWindow : Window
{
public MainWindow()
{
this.InitializeComponent();
}
private void PasswordBox_KeyDown(object sender, KeyEventArgs e)
{
// Put your rules here - Example rejects the period key
if (e.Key == Key.OemPeriod)
e.Handled = true;
}
}
private void ResetButton_OnClick(object sender, RoutedEventArgs e)
{
PasswordBox.Clear();
PasswordBox.Password = DecryptSavedPassword(_encryptedPassword);
}