Перейти к содержанию

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

Этот пример показывает, как маскировать ввод пользователя символом пароля (например, «*») и позволить пользователю показывать и скрывать введённый пароль с помощью кнопки.

texteditor-passwordchar

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

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

Вам нужно добавить NuGet-пакет Avalonia.Xaml.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>



* Эта страница переведена с использованием технологий машинного перевода.