Avalonia怎么实现一个密码输入框 Avalonia PasswordBox

来源:这里教程网 时间:2026-02-21 17:40:17 作者:

Avalonia 没有内置的

PasswordBox
控件,这是它与 WPF 的一个重要区别。但你可以通过组合标准控件(如
TextBox
)并配合掩码逻辑,安全、可控地实现密码输入功能。

用 TextBox + PasswordChar 实现基础密码框

Avalonia 的

TextBox
支持
PasswordChar
属性(从 v11.0.0 起稳定支持),只需设置一个掩码字符(如 ● 或 *),即可隐藏输入内容:

<TextBox PasswordChar="●" />

注意:

PasswordChar
仅影响显示,文本值仍以明文形式保留在
Text
属性中(绑定时需留意安全性)。

绑定密码并避免明文暴露(推荐做法)

为防止密码在 ViewModel 中长期以明文存在,建议使用

SecureString
(.NET 6+ 支持)或临时读取 + 立即清空策略:

在视图中绑定到
TextBox.Text
,但 ViewModel 中不长期保存;
提交时用
textBox.Text
获取当前值,立即调用
textBox.Clear()
如需更高安全级别,可借助第三方库(如
Avalonia.Controls.PasswordBox
社区封装版)或自定义控件封装
SecureString
逻辑。

添加“显示/隐藏”切换按钮(常见交互)

在 TextBox 右侧加一个 ToggleButton,控制

PasswordChar
的有无:

<Grid ColumnDefinitions="*,Auto">
  <TextBox Grid.Column="0" PasswordChar="●" x:Name="pwdBox"/>
  <ToggleButton Grid.Column="1" Content="{Binding IsPasswordVisible, Converter={StaticResource BoolToEyeIcon}}" 
                IsChecked="{Binding IsPasswordVisible}" />
</Grid>

在 ViewModel 中同步控制:

IsPasswordVisible = true
pwdBox.PasswordChar = '\0'
(空字符表示不掩码);
IsPasswordVisible = false
pwdBox.PasswordChar = '●'

自定义 PasswordBox 控件(进阶可选)

若项目中多处使用,可封装成可复用控件:

继承
TextBox
,添加
IsPasswordMode
ShowPasswordCommand
依赖属性;
内部自动管理
PasswordChar
和右侧图标按钮;
重写
OnTextChanged
避免焦点丢失时意外暴露(例如粘贴后未触发更新)。

相关推荐