通过反射启动时,WPF 窗口中的图像抛出异常
我有一个 WPF 应用程序,我将图像作为资源添加到项目中(不是从项目设置中添加,就像第二个答案的做法此处),因此它们位于一个文件夹下。我在 xaml 中像这样使用它们:
<Image Width="32" Height="32" Source="/Images/Effect.png" />
当我从 Visual Studio 或资源管理器手动运行程序时,图像显示正常,没有错误等。
但是当我通过反射从另一个应用程序运行它时,它会在 Visual 中打印这些异常工作室:
System.Windows.Data 错误:6: '目标默认值转换器' 转换器无法转换值 '/Images/Effect.png'(类型'字符串'); 如果出现以下情况,将使用后备值 可用的。 BindingExpression:Path=EffectIcon; DataItem='节点'(HashCode=34743541); 目标元素是“图像”(名称=“”); 目标属性是“源”(类型 '图像源') IOException:'System.IO.IOException: 无法找到资源 'images/effect.png'。
最后,应用程序启动正常,但所有图像都丢失了。
知道如何解决这个问题吗?
我应该以不同的方式绑定图像吗?
I have a WPF application where I added the images as resources to the project (not from project settings, like how the 2nd answer does it here), so they are under a folder. I use them like this in xaml:
<Image Width="32" Height="32" Source="/Images/Effect.png" />
When I run the program manually, either from visual studio or explorer, the images show up fine, no error, etc.
But when I run it from another application via reflection, it prints these exceptions inside visual studio:
System.Windows.Data Error: 6 :
'TargetDefaultValueConverter'
converter failed to convert value
'/Images/Effect.png' (type 'String');
fallback value will be used, if
available.
BindingExpression:Path=EffectIcon;
DataItem='Node' (HashCode=34743541);
target element is 'Image' (Name='');
target property is 'Source' (type
'ImageSource')
IOException:'System.IO.IOException:
Cannot locate resource
'images/effect.png'.
In the end, the application starts up fine but all images are missing.
Any idea on how to fix this?
Should I be binding the images in a different way?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
问题可能是,将在通过反射实例化模块的程序集中搜索图像。解决此问题的一种可能方法是为图像分配完整路径,包括程序集名称。像这样的东西:
The problem is probably that the images will be searched in the assembly from where you instantiated your modules via reflection. One possibility to resolve this problem is, that you assign the full path to the images, including the assembly name. Something like:
试试这个:“pack://application:,,,/AssemblyName;/components/image/effect.png”
Try this: "pack://application:,,,/AssemblyName;/components/image/effect.png"