Как сделать PasswordBox доступным только в UWP? - PullRequest
0 голосов
/ 22 октября 2019

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

Как я могу сделать PasswordBox доступным только для чтения, как вы можете с текстовыми полями? Я знаю, что у него нет того же свойства для установки, но есть ли обходной путь для PasswordBoxes в UWP, который будет работать?

Вот что у меня есть: View.xaml

<PasswordBox x:Name="Password" Password="{x:Bind Acct.Password}" CornerRadius="5" PointerEntered="Password_PointerEntered"
     PointerExited="Password_PointerExited" VerticalAlignment="Center" FontSize="20" Width="175"  />

View.xaml.cs

        private void Password_PointerEntered(object sender, PointerRoutedEventArgs e)
        {
            var pb = sender as PasswordBox;
            pb.PasswordRevealMode = PasswordRevealMode.Visible;
        }

        private void Password_PointerExited(object sender, PointerRoutedEventArgs e)
        {
            var pb = sender as PasswordBox;
            pb.PasswordRevealMode = PasswordRevealMode.Hidden;
        }

До сих пор я пытался заставить PasswordBox потерять фокус после того, как он получил фокус, нажав на него для редактирования, но у него не было большой удачи там. Есть ли способ отменить события, когда они происходят?

Любая помощь очень ценится!

Ответы [ 3 ]

2 голосов
/ 22 октября 2019

Вы можете отреагировать на событие PasswordChanged и использовать его, чтобы вернуть исходное значение свойству PasswordBox.Password, например:

private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e) {
    Password.Password = "cannot-be-changed password";
}

Вы также можете сделать свой PasswordBox невосприимчивым кфокус с разметкой IsHitTestVisible="False" и "Focusable="False". Это не помешает пользователю изменить пароль, но укажет ему, что это не поддерживается. Это может помешать вашим PointerEntered и PointerExited событиям.

1 голос
/ 22 октября 2019

Вы можете использовать событие PreviewKeyDown и перехватывать все нажатые клавиши.

<PasswordBox PreviewKeyDown="OnPreviewKeyDown" />

private void OnPreviewKeyDown(object sender, KeyRoutedEventArgs e)
{
    e.Handled = true;
}
0 голосов
/ 22 октября 2019

Благодаря помощи других ответов с решением 2 других проблем, похожих на мою, я смог найти решение для своего конкретного приложения.

Используя AllowFocusOnInterface="False" в PasswordBox в XAML, я достигвозможность раскрыть пароль при наведении курсора и сделать его таким, чтобы пользователи не могли щелкать и редактировать PasswordBox.

Спасибо всем за вашу помощь! Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...