Skip to content

Как создать текстовое поле для ввода пароля

В этом примере показано, как замаскировать вводимые пользователем данные символом пароля (например, '*') и позволяют пользователю раскрывать и скрывать введенный пароль с помощью кнопки.

texteditor-passwordchar

Класс TextEditor в настоящее время не содержит свойства PasswordChar. Однако вы можете включить режим пароля для внутреннего текстового поля (контрол TextBox), которое встроено в контрол TextEditor и обеспечивает функциональность редактирования текста.

В следующем примере создается поведение PasswordBoxBehavior, которое активирует режим пароля для внутреннего текстового поля текстового редактора (TextBox). Класс PasswordBoxBehavior предоставляет свойства PasswordChar и ShowRevealButton для указания символа маски пароля и видимости кнопки раскрытия пароля.

Вам необходимо добавить пакет Avalonia.Xaml.Behaviors NuGet в свой проект, чтобы использовать behaviors.

namespace DemoCenter.Views;

public class PasswordBoxBehavior : Avalonia.Xaml.Interactivity.Behavior<TextEditor>
{
    private const string revealButtonClassName = "revealPasswordButton";
    public char PasswordChar { get; set; } = '*';
    public bool ShowRevealButton { get; set; } = true;

    protected override void OnAttached()
    {
        base.OnAttached();
        if (AssociatedObject != null)
            AssociatedObject.Loaded += OnLoaded;
    }
    private void OnLoaded(object sender, RoutedEventArgs e)
    {
        var realEditor = AssociatedObject.FindVisualChild<TextBox>();
        if (realEditor == null)
            return;
        realEditor.PasswordChar = PasswordChar;
        if (ShowRevealButton)
            realEditor.Classes.Add(revealButtonClassName);
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();
        if (AssociatedObject != null)
            AssociatedObject.Loaded -= OnLoaded;
    }
}

Прикрепите поведение PasswordBoxBehavior к контролу TextEditor в вашем проекте следующим образом:

xmlns:view="using:DemoCenter.Views"

<mxe:TextEditor>
    <Interaction.Behaviors>
        <view:PasswordBoxBehavior />
    </Interaction.Behaviors>
</mxe:TextEditor>



* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.