2

ここSOでこの問題に関するいくつかの情報を見つけましたが、どういうわけか実際にはわかりません;-)私が読んだことから、セキュリティ上の理由により、PasswordBoxのパスワードをプロパティにバインドすることはできません。つまり、プレーンなパスワードを保持します記憶に。

私のモデルにはこれが含まれています:

private SecureString password;
public SecureString Password {
  get { return password; }
  set { password = value; }
}

PasswordBox へのデータ バインドはサポートされていませんが、Microsoft はPasswordBox からパスワードを取得して安全な方法で使用する方法を知っているはずです

そうするための適切で比較的簡単な方法は何ですか?

4

2 に答える 2

2

そのためUserControl、バインド可能な Password- を使用して を作成しましたSecureString。このコードは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>
于 2014-10-07T10:02:56.880 に答える
0
<PasswordBox Height="29" HorizontalAlignment="Left" Margin="191,136,0,0" Name="textPassword" VerticalAlignment="Top" PasswordChar="*" Width="167" />

パスワードボックスの名前textPassword:

String pass = textPassword.Password;
于 2014-10-07T09:54:33.293 に答える