PasswordBox C# WPF
Здрастувуйте! Как сделать чтобы при выборе CheckBox пароль скрывался и наоборот, все никак не могу понять.
Отслеживать
14k 13 13 золотых знаков 38 38 серебряных знаков 63 63 бронзовых знака
задан 18 дек 2017 в 19:05
139 1 1 серебряный знак 12 12 бронзовых знаков
Вот здесь явно говорится, что такая функциональность не заложена в PasswordBox . Используйте TextBox .
18 дек 2017 в 19:24
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Как вам уже сказали, такой функциональности нет у PasswordBox . Но я предложу решение-костыль, которое как-то реализовал. У нас есть TextBox , PasswordBox , CheckBox и Button .
- TextBox — тут будет виден пароль
- PasswordBox — тут будет скрыт пароль
- CheckBox — переключатель видимости пароля
- Button — кнопка для отображения пароля в окне
Главное условие — это расположение TextBox и PasswordBox в одном и том же месте с одними и теми же координатами. Просто установить одинаковые значения. TextBox изначально убдет скрыт. Обработчик клика на CheckBox будет таким:
private void CheckBox_Click(object sender, RoutedEventArgs e) < var checkBox = sender as CheckBox; if (checkBox.IsChecked.Value) < pwdTextBox.Text = pwdPasswordBox.Password; // скопируем в TextBox из PasswordBox pwdTextBox.Visibility = Visibility.Visible; // TextBox - отобразить pwdPasswordBox.Visibility = Visibility.Hidden; // PasswordBox - скрыть >else < pwdPasswordBox.Password = pwdTextBox.Text; // скопируем в PasswordBox из TextBox pwdTextBox.Visibility = Visibility.Hidden; // TextBox - скрыть pwdPasswordBox.Visibility = Visibility.Visible; // PasswordBox - отобразить >>
Ну а по нажатию на кнопку отобразим наш пароль, это для наглядности:
private void Button_Click_1(object sender, RoutedEventArgs e)
Данный пример польносью рабочий. Да, костыль, но это самое простое решение.
Ссылка на очень похожий ответ с большого SO: showing password characters on some event for passwordbox можно еще Focus добавить, как сделано там.
Отслеживать
ответ дан 19 дек 2017 в 12:06
Denis Bubnov Denis Bubnov
14k 13 13 золотых знаков 38 38 серебряных знаков 63 63 бронзовых знака
– user206435
19 дек 2017 в 12:12
@Birdy — оригинал у меня на компьютере 🙂 но ссылку добавил, спасибо
19 дек 2017 в 12:21
Правильней, наверное, это с помощью конвертеров делать.
19 дек 2017 в 13:27
@Mirdin думаю, если вы опубликуете еще один ответ — лишним это не будет. Я привел пример быстрого и простого способа всего лишь.
19 дек 2017 в 13:29
пожалуй, можно «костылить» ещё проще 🙂 по установке/сбросу галочки в CheckBox’е заполнить/очистить всплывающую подсказку(ToolTip) самого PasswordBox’а.
20 дек 2017 в 5:35
Как отмечено выше, хоть непосредственно такого функционала у PasswordBox нет, (!)но возможно реализовать несколько костыльное решение через собственную всплывающую подсказку самого PasswordBox’а, которая есть объект (а не только лишь строчка) — создадим System.Windows.Controls.ToolTip, настроим его и по установке/сбросу галочки в CheckBox’е будем заполнять/очищать подсказку PasswordBox’у, например так:
private void checkBox_Click(object sender, RoutedEventArgs e)//на установку/снятие галочки < if (checkBox.IsChecked == true) < ToolTip tooltip = new ToolTip(); tooltip.BorderBrush = null;//нет границы tooltip.HasDropShadow = false;//не отбрасывать тень tooltip.Placement = System.Windows.Controls.Primitives.PlacementMode.Relative;//поверх элемента tooltip.StaysOpen = true;//оставаться открытым tooltip.Content = passwordBox.Password;//собственно текст подсказки = незамаскированный пароль passwordBox.ToolTip = tooltip;//установка >else < passwordBox.ToolTip = null;//сброс >; >
конечно, над оформление ещё стоит поработать 🙂 и лучше такой спец. ToolTip создавать единственный раз вместе с окном пароля.
Элемент PasswordBox
Для редактирования обыкновенного текста в WPF мы можем использовать элемент TextBox, но что насчет паролей? Этот функционал очень похож на описанный выше, но мы хотим, чтобы WPF отображал вместо символов пароля специальные символы, для того, чтобы обезопасить пользователя от кражи пароля. Для этой цели в WPF был введен элемент PasswordBox, который так же прост в использовании как TextBox. Позвольте мне показать это на примере:

На скриншоте видно, что я ввел одинаковый текст в два текстовых поля, но в элементе PasswordBox символы были автоматически заменены точками. Вы можете изменить точки на любой символ, используя свойство PasswordChar:
В этом случае, символ ‘X’ будет использован вместо точек. Если Вы хотите управлять длиной пароля — можете воспользоваться свойством MaxLength:
Я использовал два этих свойства в примере ниже:

Обратите внимание, что теперь символы пароля заменены на ‘X’ и ввести можно только пароль из 6 символов.
PasswordBox и связывание
В случае, когда Вам нужно получить пароль из PasswordBox, можете использовать свойство Password из CodeBehind. Однако, из соображений безопасности, Password не реализовано как свойство зависимости, иными словами, Вы не можете использовать по отношению к нему привязку.
Как уже было сказано, Вы можете получить пароль из CodeBehind, но, если Вы хотите реализовать это в рамках MVVM, либо просто очень любите связывание данных — был придуман обходной путь. Можете больше прочитать на эту тему здесь: http://blog.functionalfun.net/2008/06/wpf-passwordbox-and-data-binding.html
This article has been fully translated into the following languages:
Is your preferred language not on the list? Click here to help us translate this article into your language!
WPF PasswordBox Control
The password box control is a special type of TextBox designed to enter passwords. The typed in characters are replaced by asterisks. Since the password box contains a sensible password it does not allow cut, copy, undo and redo commands.

> Content="Password:" /> x:Name="passwordBox" Width="130" /> >
Change the password character
To replace the asteriks character by another character, set the PasswordChar property to the character you desire.
x:Name="passwordBox" PasswordChar="*" />
Limit the length of the password
To limit the length of the password a user can enter set the MaxLength property to the amount of characters you allow.
x:Name="passwordBox" MaxLength="8" />
Databind the Password Property of a WPF PasswordBox
When you try to databind the password property of a PasswordBox you will recognize that you cannot do data binding on it. The reason for this is, that the password property is not backed by a DependencyProperty.
The reason is databinding passwords is not a good design for security reasons and should be avoided. But sometimes this security is not necessary, then it’s only cumbersome that you cannot bind to the password property. In this special cases you can take advantage of the following PasswortBoxHelper.
> w:PasswordHelper.Attach="True" w:PasswordHelper.Password="" Width="130"/> Padding="10,0" x:Name="plain" /> >
The PasswordHelper is attached to the password box by calling the PasswordHelper.Attach property. The attached property PasswordHelper.Password provides a bindable copy of the original password property of the PasswordBox control.
public static class PasswordHelper { public static readonly DependencyProperty PasswordProperty = DependencyProperty.RegisterAttached("Password", typeof(string), typeof(PasswordHelper), new FrameworkPropertyMetadata(string.Empty, OnPasswordPropertyChanged)); public static readonly DependencyProperty AttachProperty = DependencyProperty.RegisterAttached("Attach", typeof(bool), typeof(PasswordHelper), new PropertyMetadata(false, Attach)); private static readonly DependencyProperty IsUpdatingProperty = DependencyProperty.RegisterAttached("IsUpdating", typeof(bool), typeof(PasswordHelper)); public static void SetAttach(DependencyObject dp, bool value) { dp.SetValue(AttachProperty, value); } public static bool GetAttach(DependencyObject dp) { return (bool)dp.GetValue(AttachProperty); } public static string GetPassword(DependencyObject dp) { return (string)dp.GetValue(PasswordProperty); } public static void SetPassword(DependencyObject dp, string value) { dp.SetValue(PasswordProperty, value); } private static bool GetIsUpdating(DependencyObject dp) { return (bool)dp.GetValue(IsUpdatingProperty); } private static void SetIsUpdating(DependencyObject dp, bool value) { dp.SetValue(IsUpdatingProperty, value); } private static void OnPasswordPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) { PasswordBox passwordBox = sender as PasswordBox; passwordBox.PasswordChanged -= PasswordChanged; if (!(bool)GetIsUpdating(passwordBox)) { passwordBox.Password = (string)e.NewValue; } passwordBox.PasswordChanged += PasswordChanged; } private static void Attach(DependencyObject sender, DependencyPropertyChangedEventArgs e) { PasswordBox passwordBox = sender as PasswordBox; if (passwordBox == null) return; if ((bool)e.OldValue) { passwordBox.PasswordChanged -= PasswordChanged; } if ((bool)e.NewValue) { passwordBox.PasswordChanged += PasswordChanged; } } private static void PasswordChanged(object sender, RoutedEventArgs e) { PasswordBox passwordBox = sender as PasswordBox; SetIsUpdating(passwordBox, true); SetPassword(passwordBox, passwordBox.Password); SetIsUpdating(passwordBox, false); } }
The Idea for this password helper was originally posted here:
Last modified: 2014-06-22 08:58:38
Copyright (c) by Christian Moser, 2011.
Comments on this article
So I have a call to the navigation service, and I have to save the password, and replace it afterwards. Thought I would let you know.
WPF PasswordBox Overview
Thank you for choosing Telerik RadPasswordBox!
RadPasswordBox is a control used for easily entering and handling passwords. It is essential to use this control whenever a user is prompted to enter a password.
The RadPasswordBox is part of Telerik UI for WPF, a professional grade UI library with 160+ components for building modern and feature-rich applications. To try it out sign up for a free 30-day trial.

Key Features
- Password functionality: RadPasswordBox hides the characters a user is typing for privacy reasons.
- ShowPassword button: Easily customizable button for displaying the password at runtime with three visibility modes.
- Watermark: RadPasswordBox control allows defining and using watermark in the input field.
- Styling and Appearance: Provides an easy way to customize the appearance of the control.
You can check RadPasswordBox demos at: https://demos.telerik.com/wpf.
See Also
- Getting Started
- Visual Structure
In this article
Related articles
Not finding the help you need?
Getting Started
- Install Now
- Demos
- SDK Samples Browser
- Sample Applications
- WPF DataGrid Product Page
Support Resources
- Code Library
- Knowledge Base
- MVVM Support
- Videos
- GitHub SDK Repository
Community
- Forums
- Blogs
- XAML Feedback Portal
- Document Processing Feedback Portal
Copyright © 2023 Progress Software Corporation and/or its subsidiaries or affiliates.
All Rights Reserved.
Progress, Telerik, and certain product names used herein are trademarks or registered trademarks of Progress Software Corporation and/or one of its subsidiaries or affiliates in the U.S. and/or other countries. See Trademarks for appropriate markings.
- Terms of Use
- Privacy Center
- Security Center
- Trademarks
- License Agreements
- Code of Conduct
- Doc Copyright