【发布时间】:2016-10-10 20:12:44
【问题描述】:
我有一个密码框,我正在向其中添加一个“显示密码”按钮(如图所示):
密码文本框的相关 XAML 如下所示:
<Border VerticalAlignment="Center" Grid.Row="2" Margin="2" Grid.Column="1"
BorderThickness="1"
BorderBrush="Black"
Background="White">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<PasswordBox Name="txtPassword" Grid.Column="0" MaxLength="100" Margin="2" BorderThickness="0" GotFocus="txtPassword_GotFocus" PasswordChanged="txtPassword_PasswordChanged" />
<TextBox Name="txtVisiblePassword" Grid.Column="0" MaxLength="100" Margin="2" BorderThickness="0" Visibility="Collapsed" Height="22" />
<Button Grid.Column="1" Style="{StaticResource LightHoverButton}" x:Name="btnShowPassword" PreviewMouseDown="btnShowPassword_PreviewMouseDown" PreviewMouseUp="btnShowPassword_PreviewMouseUp">
<Image Source="{StaticResource ShowPassword_128}" Style="{StaticResource Image_16}" Margin="3,0" />
</Button>
</Grid>
</Border>
后面的相关代码:
private void txtPassword_PasswordChanged(object sender, RoutedEventArgs e)
{
//Can show password is set to false if the password being displayed has been
//placed there automatically because the password is being remembered
if (canshowpassword == false && string.IsNullOrEmpty(txtPassword.Password))
canshowpassword = true;
if (canshowpassword)
btnShowPassword.Visibility = string.IsNullOrEmpty(txtPassword.Password) ? Visibility.Collapsed : Visibility.Visible;
else
btnShowPassword.Visibility = Visibility.Collapsed;
}
我遇到的问题是,有一个“记住密码”选项,我不希望用户能够看到密码,除非密码文本框已至少“清除”所有文本一次(以防止用户查看自动输入的全部或部分密码)。上面的代码很接近,但是,如果用户选择所有文本然后按一个键开始一个新密码,则“空”密码不会通过密码更改事件和“显示密码”按钮出现不会变得可见。用户必须删除所有文本,然后再次开始输入。我想抓住用户选择所有文本并开始输入的情况。
如果我预览 Key down 事件,PasswordBox 上没有“SelectedText”属性,所以我不知道如何提前知道密码是否会在添加新文本之前被清除。
有没有办法知道 PasswordBox 密码已被清除,和/或知道是否选择了所有文本?
【问题讨论】: