WPF加载图片时抛出“无法定位资源”的异常

106

我有一个WPF窗口,背景图片是我本地系统上的一个文件。因此,XAML文件看起来像这样:

 <Window.Background>
    <ImageBrush ImageSource="/MYASSEMBLY;component/Resources/MyPic.png"/>
 </Window.Background>
在XAML设计器中,它实际上显示了这个背景图像,因此该图像确实存在于MYASSEMBLY\Resources文件夹中。但是,在启动应用程序时,在InitializeComponent()函数调用中,它会抛出异常“Cannot locate resource 'resources/mypic.png'.”。所以我现在完全迷失了方向。设计时和运行时的目录不同,因此运行时不存在吗?

图片的构建模式是什么?(在设计师中看到的东西什么也不说) - H.B.
1
谢谢 @H.B. ,就像我在回答中评论的那样,我甚至没有将图像包含在项目中。我猜设计和运行时的行为不同对于像我这样的新手有点令人困惑。 - tete
@tete:我不建议使用设计师,因为它很容易产生可怕的代码,到处都是“边距”和“对齐”。人们很容易使用吸附而不是动态地使用不同的面板来布局。 - H.B.
@H.B. 所以你是完全通过代码设计 XAML,还是使用像 Blend 这样的设计工具?我实际上正在使用集成了 Blend 的 VS12 RC。但我主要是一名编码人员,所以除非老板说必须学,否则我宁愿不去学 :) - tete
1
@H.B. Than说得没错。我想对于我们这样的应用程序,我大多数时候也可以使用代码。设计师只是作为参考。我会避免直接在那里移动和放置东西。可能我们有经验的程序员,他们曾经使用Windows Form和Access工作,会觉得它更加友好。非常感谢! - tete
显示剩余2条评论
2个回答

267
在解决方案资源管理器中,将图像文件的“Build Action”属性设置为“Resource”。然后,在解决方案资源管理器面板上右键单击,并执行“Clean Solution”操作,然后重新构建。

35
而且,别忘了进行清理和重建操作。正如Buzz所说的那样,很容易忽略这一点。我就犯过这个错误 :) - invalidusername
1
嘿嘿,我们大多数人,包括原帖发布者,在实际编程中并没有遇到这个问题,但是我们没想到如果一个图像已经在物理目录中存在,它还必须在解决方案资源管理器中显示。说实话,这个要求在资源管理器中显示还挺酷的。谢谢! - j riv
15
太神奇了——清理和重建才是问题所在!我花了好几个小时才试图想明白这个问题,谢谢! - Ed Bayiates
1
哦,VS...现在我必须在每次构建之后清理以消除虚假错误,在设计器中查看我的控件,并治愈XAML的波浪线病。 - fartwhif
1
我在这里已经9年了,这是我在整个StackOverflow社区中找到的唯一解决此问题的答案,包括其他语言。谢谢! - Natan Fernandes
显示剩余5条评论

-1

我之前也遇到过这个问题。在运行时出现运行时错误,是因为您的图像没有自动添加到解决方案中。请检查图像是否存在于“解决方案资源管理器”中。如果不存在,请将其添加到您的解决方案中。


你应该编辑你的答案,使其更易于阅读:(1)不要使用每个单词的首字母大写;(2)添加一些标点符号;(3)不需要像“谢谢”这样的东西。 - Adrian Mole
由于您目前的回答不够清晰,请[编辑]以添加更多细节,帮助其他人了解这如何回答所提出的问题。您可以在帮助中心找到有关撰写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接