Здрастувуйте! Как сделать чтобы при выборе CheckBox
пароль скрывался и наоборот, все никак не могу понять.
Как вам уже сказали, такой функциональности нет у PasswordBox
. Но я предложу решение-костыль, которое как-то реализовал. У нас есть TextBox
, PasswordBox
, CheckBox
и Button
.
<TextBox Name="pwdTextBox" Grid.Column="2" HorizontalAlignment="Left" Margin="409,576,0,0" VerticalAlignment="Top" Width="170" Visibility="Hidden"/>
<PasswordBox Name="pwdPasswordBox" Grid.Column="2" HorizontalAlignment="Left" Margin="409,576,0,0" VerticalAlignment="Top" Width="170"/>
<CheckBox Name="checkBoxPwd" Content="Show password" Grid.Column="2" HorizontalAlignment="Left" Margin="452,547,0,0" VerticalAlignment="Top" Click="CheckBox_Click"/>
<Button Content="Submit" Grid.Column="2" HorizontalAlignment="Left" Margin="452,617,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>
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
добавить, как сделано там.
Как отмечено выше, хоть непосредственно такого функционала у 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 создавать единственный раз вместе с окном пароля.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Применение BlockingCollection, используя подход, когда элементы вытаскиваются из очереди(например ConcurrentQueue), используя метод Take в цикле - всегда блокирует...
ПриветНе могу добавить DataSource в С# так как у меня нету этой кнопки
Задача создавать программно экземпляры объектов класса UserControl для заполнения ими таблицы GridView