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

C#跨程序集加载图片问题:WPF加载其他程序集的Content图片

在WPF窗口中显示Content类型的外部资源图片

嗨,我来帮你搞定这个问题!既然你的图片已经被设为Content并配置了Copy if newer,而且确认编译后出现在exe所在目录的Common/Images下,那有几种简单的方式可以在WPF窗口里显示它:

方法一:在代码后台构造路径加载

你可以通过获取应用程序的运行目录,拼接出图片的完整路径来加载:

using System.IO;
using System.Windows.Media.Imaging;

// 比如在窗口的Loaded事件或者构造函数中
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    // 获取当前程序的运行根目录
    var baseDir = AppDomain.CurrentDomain.BaseDirectory;
    // 拼接图片的相对路径
    var imageFullPath = Path.Combine(baseDir, "Common", "Images", "CompanyLogo.png");
    // 加载图片到Image控件
    companyLogoImage.Source = new BitmapImage(new Uri(imageFullPath));
}

方法二:直接使用相对路径(代码或XAML)

WPF默认会以应用程序的运行目录作为相对路径的基准,所以你可以直接用相对路径来指定图片位置:

代码后台写法

companyLogoImage.Source = new BitmapImage(new Uri(@"Common/Images/CompanyLogo.png", UriKind.Relative));

XAML直接写法

如果想在XAML里直接绑定,更简洁:

<Image x:Name="companyLogoImage" Source="Common/Images/CompanyLogo.png" />

额外:让设计时也能预览图片

上面的XAML写法在运行时没问题,但设计器里可能看不到图片。如果想在设计阶段也能预览,可以添加设计时数据:

<!-- 记得在窗口根元素添加设计时命名空间:xmlns:d="http://schemas.microsoft.com/expression/blend/2008" -->
<Image x:Name="companyLogoImage">
    <Image.Source>
        <BitmapImage UriSource="Common/Images/CompanyLogo.png" />
    </Image.Source>
    <!-- 设计时使用ResourcesAssembly里的原始路径预览 -->
    <d:Image.Source>
        <BitmapImage UriSource="../ResourcesAssembly/Common/Images/CompanyLogo.png" />
    </d:Image.Source>
</Image>

几个要注意的点

  • 再次确认编译后的输出目录里确实存在Common/Images/CompanyLogo.png,有时候如果项目引用的设置不对,可能会导致文件没复制过去;
  • 如果后续要打包部署WPF应用,记得把这些Content类型的图片文件包含到安装包中,否则运行时会找不到;
  • 不要尝试用Pack URI加载!Pack URI是给**嵌入资源(Embedded Resource)**用的,你的图片是Content类型,完全不适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:40:08