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

WinUI中如何在Xaml里正确使用EmbeddedResource加载图片?

在XAML中用EmbeddedResource加载图片的正确姿势

我搞不懂这段代码为啥跑不起来:

<Image Source="pack://application:,,,/Resources/Steam.png" Width="30"/>

我想用EmbeddedResource管理资源,不想把所有资源都丢到bin文件夹里,有没有人能指导下怎么在XAML里正确用EmbeddedResource?

我试过下面几种写法,全都没效果:

<Image Source="pack://application:,,,/Resources/Steam.png" Width="30"/>
<Image Source="/Resources/Steam.png" Width="30"/>

我的项目文件配置是这样的:

<ItemGroup>
    <EmbeddedResource Include="Resources\Steam.png" />
  </ItemGroup>

解决步骤

1. 补全Pack URI的程序集信息

EmbeddedResource的Pack URI必须包含程序集名称,正确格式是:
pack://application:,,,/[你的程序集名称];component/[资源相对路径]

比如你的程序集叫WpfDemoApp,那XAML里应该这么写:

<Image Source="pack://application:,,,/WpfDemoApp;component/Resources/Steam.png" Width="30"/>

.Net Core/.Net 5+项目可以简化成:

<Image Source="/WpfDemoApp;component/Resources/Steam.png" Width="30"/>

2. 确认资源的生成操作设置

在Visual Studio里选中Steam.png,打开属性窗口,确保生成操作是Embedded Resource,别选成Resource或者Content了。

3. 检查路径大小写

WPF的Pack URI对大小写敏感,要保证XAML里写的路径和实际文件路径完全一致,比如别把Steam.png写成steam.png。

4. 代码加载的备选方案

如果XAML写法还是有问题,试试后台代码手动加载:

using System.Reflection;
using System.Windows.Media.Imaging;

// 获取当前程序集
var assembly = Assembly.GetExecutingAssembly();
// 资源名称格式:程序集名.文件夹名.文件名,多层文件夹用点分隔
var resourceName = "WpfDemoApp.Resources.Steam.png";

using (var stream = assembly.GetManifestResourceStream(resourceName))
{
    var bitmap = new BitmapImage();
    bitmap.BeginInit();
    bitmap.StreamSource = stream;
    bitmap.EndInit();
    // 给Image控件赋值
    YourImageControl.Source = bitmap;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:57:24