我在 SO 上找到了有关此问题的一些信息,但不知何故我并没有真正理解;-)从我所读到的内容来看,由于安全原因,PasswordBox 的密码不能绑定(bind)到属性,即保留内存中的明文密码。
我的模型包含这个:
private SecureString password;
public SecureString Password {
get { return password; }
set { password = value; }
}
虽然不支持将数据绑定(bind)到PasswordBox,但Microsoft 一定知道如何从PasswordBox 获取密码并以安全的方式使用它,嗯?
什么是合适且相对简单的方法?
最佳答案
因此,我编写了一个带有可绑定(bind)密码-SecureString
的UserControl
。这个UserControl
的代码如下:
代码隐藏:
public partial class BindablePasswordBox : UserControl
{
public static readonly DependencyProperty SecurePasswordProperty = DependencyProperty.Register(
"SecurePassword", typeof(SecureString), typeof(BindablePasswordBox), new PropertyMetadata(default(SecureString)));
public SecureString SecurePassword
{
get { return (SecureString)GetValue(SecurePasswordProperty); }
set { SetValue(SecurePasswordProperty, value); }
}
public BindablePasswordBox()
{
InitializeComponent();
}
private void PasswordBox_OnPasswordChanged(object sender, RoutedEventArgs e)
{
SecurePassword = ((PasswordBox)sender).SecurePassword;
}
private void BindablePasswordBox_OnGotFocus(object sender, RoutedEventArgs e)
{
passwordBox.Focus();
}
}
XAML:
<UserControl x:Class="Sol.Controls.BindablePasswordBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"
GotFocus="BindablePasswordBox_OnGotFocus">
<PasswordBox x:Name="passwordBox" PasswordChanged="PasswordBox_OnPasswordChanged"/>
</UserControl>
关于wpf - 从PasswordBox获取密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13513472/