在PasswordBox中显示密码的好方法

4

我想知道是否有好的方法来显示PasswordBox中的密码。已经了解到可以将文本框绑定到PasswordBox,但是否有其他方法。


1
我总是用TextBox来实现这个目的。试一下吧。 - Anton Semenov
我仍然想要隐藏文本框中的值。 - codemoonger
1
嘿,事实证明这并不是一件简单的事情。请查看https://dev59.com/X2LVa4cB1Zd3GeqPxIem - Anton Semenov
3个回答

6
如果希望密码可见,应该使用文本框。密码框的唯一功能是掩盖输入内容,不提供额外的功能。也可以在运行时切换文本框和密码框。

但如果我有一个文本框,我想让它看起来像一个密码框。因此,当我在文本框中写入时,会显示为圆点而不是字母,然后我有一个按钮可以显示实际值。 - codemoonger
1
在这种情况下,请尝试使用以下代码:myTextBox.PasswordChar = '*'。让我们看看它是如何工作的。 - Remade
2
密码框的唯一功能是掩盖输入,我想指出的是WPF PasswordBox在SecurePassword属性中(它是SecureString)安全地存储值,而TextBox不会这样做。 - Richardissimo

0

这里有一个好的简单方法,您可以从这里下载密码字体,并在文本框中使用它作为字体,而不是密码框。每当您想显示密码时,您只需要将字体从“密码”切换到“Microsoft Sans Serif”或其他任何字体即可。// 例如,当我点击复选框时:

Private Sub ChkShowPass_Click(sender As Object, e As RoutedEventArgs)
    If ChkShowPass.IsChecked = True Then
        'show Password
        TxtPassword.FontFamily = New FontFamily("Microsoft Sans Serif")
    ElseIf ChkShowPass.IsChecked = False Then
        'hide Password
        TxtPassword.FontFamily = New FontFamily("Password")
    End If
End Sub

希望这能对你有所帮助,也能帮助许多程序员。

0

在PasswordBox控件中,没有任何内置属性可以显示密码字符。但是我们可以通过TextBox控件来显示PasswordBox中的密码。对于WPF中具有显示/隐藏功能的PasswordBox,我们将使用两个TextBlock控件、一个TextBox控件、一个PasswordBox控件和一个Image控件。

XAML

<Grid>
    <TextBlock Text="Welcome&#xa;To see the Password"
               FontSize="28"
               FontWeight="Bold"
               HorizontalAlignment="Center"
               VerticalAlignment="Top"
               TextAlignment="Center"
               Margin="0,30,0,0" />
    <TextBlock Text="Enter your password"
               FontSize="20"
               HorizontalAlignment="Left"
               Margin="112,160,0,0"
               VerticalAlignment="Top" />
    <TextBox Height="40"
             FontSize="20"
             Padding="5,2,47,0"
             HorizontalAlignment="Left"
             Margin="112,193,0,0"
             Name="txtVisiblePasswordbox"
             VerticalAlignment="Top"
             Width="274" />
    <PasswordBox Height="40"
                 FontSize="20"
                 Padding="5,2,47,0" 
                 HorizontalAlignment="Left"
                 Margin="112,193,0,0"
                 Name="txtPasswordbox"
                 VerticalAlignment="Top"
                 Width="274"
                 PasswordChanged="txtPasswordbox_PasswordChanged" />
    <Image Visibility="Hidden"
           Height="30"
           HorizontalAlignment="Left"
           Name="ImgShowHide"
           Stretch="Fill"
           VerticalAlignment="Top"
           Width="30"
           Margin="351,198,0,0"
           MouseLeave="ImgShowHide_MouseLeave"
           PreviewMouseDown="ImgShowHide_PreviewMouseDown"
           PreviewMouseUp="ImgShowHide_PreviewMouseUp" />
</Grid>

代码后台

string AppPath = Directory.GetCurrentDirectory();
public MainWindow()
{
    InitializeComponent();
    ImgShowHide.Source = new BitmapImage(new Uri(AppPath + "\\img\\clip.jpg"));
}
private void ImgShowHide_PreviewMouseUp(object sender, MouseButtonEventArgs e)
{
    HidePassword();
}

private void ImgShowHide_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    ShowPassword();
}
private void ImgShowHide_MouseLeave(object sender, MouseEventArgs e)
{
    HidePassword();
}
private void txtPasswordbox_PasswordChanged(object sender, RoutedEventArgs e)
{
    if(txtPasswordbox.Password.Length > 0)
        ImgShowHide.Visibility = Visibility.Visible;
    else
        ImgShowHide.Visibility = Visibility.Hidden;
}

void ShowPassword()
{
    ImgShowHide.Source = new BitmapImage(new Uri(AppPath + "\\img\\cus.jpg"));
    txtVisiblePasswordbox.Visibility = Visibility.Visible;
    txtPasswordbox.Visibility = Visibility.Hidden;
    txtVisiblePasswordbox.Text = txtPasswordbox.Password;
}
void HidePassword()
{
    ImgShowHide.Source = new BitmapImage(new Uri(AppPath + "\\img\\clip.jpg"));
    txtVisiblePasswordbox.Visibility = Visibility.Hidden;
    txtPasswordbox.Visibility = Visibility.Visible;
    txtPasswordbox.Focus();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接