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)官方问题:如何在我的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);
    }