#c_sharp #wpf
Здрастувуйте! Как сделать чтобы при выборе CheckBox пароль скрывался и наоборот,
все никак не могу понять.
Ответы
Ответ 1 Как вам уже сказали, такой функциональности нет у 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)
{
var passrod = checkBoxPwd.IsChecked.Value ? pwdTextBox.Text : pwdPasswordBox.Password;
MessageBox.Show(passrod);
}
Данный пример польносью рабочий. Да, костыль, но это самое простое решение.
Ссылка на очень похожий ответ с большого SO: showing password characters on some
event for passwordbox можно еще Focus добавить, как сделано там.
Ответ 2 Как отмечено выше, хоть непосредственно такого функционала у 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 создавать
единственный раз вместе с окном пароля.
Комментариев нет:
Отправить комментарий