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
相关产品推荐
相关产品推荐

