Avalonia 无内置 PasswordBox,可用 TextBox 的 PasswordChar 属性实现密码掩码;需注意 Text 属性仍存明文,推荐提交时临时读取并清空,或结合 SecureString 与 ToggleButton 实现显示/隐藏切换。

Avalonia 没有内置的 PasswordBox 控件,这是它与 WPF 的一个重要区别。但你可以通过组合标准控件(如 TextBox)并配合掩码逻辑,安全、可控地实现密码输入功能。
用 TextBox + PasswordChar 实现基础密码框
Avalonia 的 TextBox 支持 PasswordChar 属性(从 v11.0.0 起稳定支持),只需设置一个掩码字符(如 ● 或 *),即可隐藏输入内容:
注意:PasswordChar 仅影响显示,文本值仍以明文形式保留在 Text 属性中(绑定时需留意安全性)。
绑定密码并避免明文暴露(推荐做法)
为防止密码在 ViewModel 中长期以明文存在,建议使用 SecureString(.NET 6+ 支持)或临时读取 + 立即清空策略:
- 在视图中绑定到
TextBox.Text,但 ViewModel 中不长期保存; - 提交时用
textBox.Text获取当前值,立即调用textBox.Clear(); - 如需更高安全级别,可借助第三方库(如
Avalonia.Controls.PasswordBox社区封装版)或自定义控件封装SecureString逻辑。
添加“显示/隐藏”切换按钮(常见交互)
在 TextBox 右侧加一个 ToggleButton,控制 PasswordChar 的有无:
在 ViewModel 中同步控制:
-
IsPasswordVisible = true→pwdBox.PasswordChar = '\0'(空字符表示不掩码); -
IsPasswordVisible = false→pwdBox.PasswordChar = '●'。
自定义 PasswordBox 控件(进阶可选)
若项目中多处使用,可封装成可复用控件:
- 继承
TextBox,添加IsPasswordMode和ShowPasswordCommand依赖属性; - 内部自动管理
PasswordChar和右侧图标按钮; - 重写
OnTextChanged避免焦点丢失时意外暴露(例如粘贴后未触发更新)。











