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

WPF密码可见性切换时VisibilityOff.png图像无法正常显示

WPF密码框可见性切换图标异常问题解决方案

可能原因及解决步骤

1. 路径与文件名校验

  • 严格匹配文件名大小写:WPF的pack URI对大小写敏感,确保代码中的VisibilityOff.png和实际文件名完全一致(包括大小写)。
  • 确认目录结构:检查项目中img文件夹是否存在,且VisibilityOff.png确实放在该目录下,无嵌套错误。

2. 修正BitmapImage加载逻辑

后台直接创建BitmapImage时,未设置缓存选项可能导致加载失败,修改为:

PasswordEyeIcon.Source = new BitmapImage(new Uri("pack://application:,,,/img/VisibilityOff.png", UriKind.Absolute)) 
{ 
    CacheOption = BitmapCacheOption.OnLoad 
};

更稳妥的方式是提前在XAML资源字典中定义图像,后台直接引用:
XAML添加资源:

<Window.Resources>
    <BitmapImage x:Key="VisibilityIcon" UriSource="pack://application:,,,/img/Visibility.png"/>
    <BitmapImage x:Key="VisibilityOffIcon" UriSource="pack://application:,,,/img/VisibilityOff.png"/>
</Window.Resources>

后台代码修改:

PasswordEyeIcon.Source = (BitmapImage)FindResource("VisibilityOffIcon");

3. 检查图像文件完整性

  • 用图片查看器打开VisibilityOff.png,确认文件未损坏;若损坏,替换为正常图像文件。
  • 确认图像格式为WPF支持的类型(如PNG、JPG),无特殊编码问题。

4. 确认资源属性设置

右键VisibilityOff.png → 属性:

  • 生成操作设置为Resource
  • 复制到输出目录设置为不复制(资源已嵌入程序集,无需复制到输出目录)

优化后完整代码示例

XAML部分:

<Window.Resources>
    <BitmapImage x:Key="VisibilityIcon" UriSource="/img/Visibility.png"/>
    <BitmapImage x:Key="VisibilityOffIcon" UriSource="/img/VisibilityOff.png"/>
</Window.Resources>

<Image x:Name="PasswordEyeIcon"
       Source="{StaticResource VisibilityIcon}"
       Width="20" Height="20" Margin="0,0,10,0"
       VerticalAlignment="Center" HorizontalAlignment="Right"
       Cursor="Hand" MouseDown="PasswordEyeIcon_MouseDown"/>

后台代码:

private bool isPasswordVisible = false;

private void PasswordEyeIcon_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (isPasswordVisible)
    {
        PasswordTextBox.Visibility = Visibility.Collapsed;
        PasswordBox.Visibility = Visibility.Visible;
        PasswordBox.Password = PasswordTextBox.Text;
        PasswordEyeIcon.Source = (BitmapImage)FindResource("VisibilityIcon");
        isPasswordVisible = false;
    }
    else
    {
        PasswordTextBox.Text = PasswordBox.Password;
        PasswordBox.Visibility = Visibility.Collapsed;
        PasswordTextBox.Visibility = Visibility.Visible;
        PasswordEyeIcon.Source = (BitmapImage)FindResource("VisibilityOffIcon");
        isPasswordVisible = true;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:33:15