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避免焦点丢失时意外暴露(例如粘贴后未触发更新)。
