You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF项目中如何用PasswordBox实现密码显示/隐藏功能?

WPF PasswordBox 密码显隐实现方案

一、先确认PasswordBox自带的密码显隐功能

WPF的PasswordBox从.NET 4.5版本开始就自带密码显隐能力,核心是PasswordRevealMode属性,你之前的PasswordReveal方法无效,大概率是没正确配置这个属性:

  • PasswordRevealMode.Hidden:默认行为,始终以圆点/星号隐藏密码
  • PasswordRevealMode.Visible:始终显示明文密码
  • PasswordRevealMode.Peek:按住鼠标时显示明文,松开后自动恢复隐藏(类似主流浏览器密码框的效果)

XAML示例:

<PasswordBox PasswordRevealMode="Peek" Width="200" />

如果你的项目基于.NET 4.5以下版本,这个属性不存在,就得用其他方案。

二、用Checkbox实现自定义密码显隐

如果自带的PasswordRevealMode不符合需求,完全可以用Checkbox配合PasswordBox实现自定义显隐逻辑,核心思路是通过开关切换PasswordBox和一个隐藏TextBox的可见性,同时同步密码内容:

XAML示例:

<Grid>
    <PasswordBox x:Name="PasswordBoxControl" Width="200" PasswordChanged="PasswordBox_PasswordChanged" />
    <TextBox x:Name="PasswordTextBox" Width="200" Visibility="Collapsed" />
    <Checkbox Content="显示密码" Margin="0,0,0,30" VerticalAlignment="Bottom" 
              Checked="PasswordShow_Checked" Unchecked="PasswordShow_Unchecked" />
</Grid>

后台C#代码:

private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e)
{
    // 实时同步密码到TextBox,避免切换显隐时内容不一致
    PasswordTextBox.Text = PasswordBoxControl.Password;
}

private void PasswordShow_Checked(object sender, RoutedEventArgs e)
{
    PasswordTextBox.Text = PasswordBoxControl.Password;
    PasswordTextBox.Visibility = Visibility.Visible;
    PasswordBoxControl.Visibility = Visibility.Collapsed;
}

private void PasswordShow_Unchecked(object sender, RoutedEventArgs e)
{
    PasswordBoxControl.Password = PasswordTextBox.Text;
    PasswordBoxControl.Visibility = Visibility.Visible;
    PasswordTextBox.Visibility = Visibility.Collapsed;
}

可以把TextBox的样式改成和PasswordBox一致,保证视觉统一。

三、关于用TextBox替代的方案

如果不想用PasswordBox,也可以直接用TextBox实现密码显隐:

  • 需要隐藏密码时,设置PasswordChar="●"(或其他符号)
  • 需要显示时,设置PasswordChar="\0"(空字符)

XAML示例:

<TextBox x:Name="PasswordTextBox" Width="200" PasswordChar="●" />
<Checkbox Content="显示密码" Margin="0,0,0,30" VerticalAlignment="Bottom" 
          Checked="PasswordShow_Checked" Unchecked="PasswordShow_Unchecked" />

后台代码:

private void PasswordShow_Checked(object sender, RoutedEventArgs e)
{
    PasswordTextBox.PasswordChar = '\0';
}

private void PasswordShow_Unchecked(object sender, RoutedEventArgs e)
{
    PasswordTextBox.PasswordChar = '●';
}

注意:TextBox的Text属性是明文存储的,而PasswordBox的Password属性是SecureString类型,敏感密码场景下PasswordBox的安全性更高。

内容的提问来源于stack exchange,提问作者yash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 08:12:43