Хороший способ показать пароль в PasswordBox

Интересно, у кого-нибудь есть хорошая идея, как показать пароль в PasswordBox. Читал, что вы можете привязать текстовое поле к паролю, но это не другой способ сделать это.


person mogren3000    schedule 09.06.2013    source источник
comment
Я всегда использую TextBox для этих целей. Попробуй   -  person Anton Semenov    schedule 09.06.2013
comment
Я все еще хочу скрыть значение в текстовом поле   -  person mogren3000    schedule 09.06.2013
comment
хех, как оказалось, это не тривиально. посмотрите stackoverflow. ком/вопросы/10091466/   -  person Anton Semenov    schedule 09.06.2013
comment
Сообщение по теме - Где я могу найти бесплатное текстовое поле с маской в ​​WPF?   -  person RBT    schedule 10.04.2018


Ответы (2)


Если вы хотите, чтобы ваш пароль был виден, используйте текстовое поле. Единственная функция поля пароля — маскировать ввод. Он не предоставляет дополнительных функций. Также возможно переключить ваше текстовое поле и поле пароля во время выполнения.

person Remade    schedule 09.06.2013
comment
Но если у меня есть текстовое поле, я хочу сделать его похожим на пароль. Поэтому, когда я пишу в текстовом поле, это точки вместо букв, а затем у меня есть кнопка, чтобы показать фактическое значение - person mogren3000; 09.06.2013
comment
В этом случае. Попробуйте это.myTextBox.PasswordChar = '*'. Посмотрим, как это работает - person Remade; 09.06.2013
comment
Единственная функция поля пароля — маскировать ввод — просто хотел указать, что WPF PasswordBox надежно хранит значение в памяти в свойстве SecurePassword (которое представляет собой SecureString), чего не делает TextBox. - person Richardissimo; 02.06.2018

В элементе управления PasswordBox нет встроенных свойств для отображения символа пароля. Но мы могли бы сделать это с помощью элемента управления TextBox, чтобы отобразить пароль в PasswordBox. Для PasswordBox с функцией отображения/скрытия в WPF. Мы будем использовать два элемента управления 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();
}
person Mohit Shrivastava    schedule 23.09.2015