我正在使用MEF,Prism和WPF。我有一个简单的模块(现在,当我越过这个障碍时,我会用它做更多的事情),它显示一个源自该模块的静态资源的图像。以下是视图的xaml:
<UserControl x:Class="SplashScreenModule.SplashView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
Height="960" Width="1180">
<Grid>
<Label>
<Image Source="Images/My Image.png"/>
</Label>
</Grid>
图像显示在设计器中,但是当我运行代码时,窗口是空白的。如果我用简单的文本替换图像,文本将按预期显示。
<Label>
This shows up in the window.
</Label>
我花了最后3个小时试图解决这个问题并且很难过。我将不胜感激任何帮助。
谢谢, 比尔
答案 0 :(得分:0)
您必须知道在DesignTime和RunTime上管理资源的方式有所不同。在DesignTime,不需要编译,因此即使它没有包含在项目中,它也能够显示资源。
在运行时这通常是可行的,但最好在项目中包含资源(即在解决方案中创建文件夹图像,并在此文件夹中添加“My Image.png”),以确保与您的exe相比,您的资源位置。
如果您这样做并且图像仍未显示,请尝试删除标签并再次执行。 通过这样做,它对我来说很好。图像显示后,您可以添加标签。
希望它有所帮助。
答案 1 :(得分:0)
以下代码对我有用:
<Window x:Class="LabelImage.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Label>
<Image Source="Images/visual studio.png" />
</Label>
</Grid>
</Window>
我像你一样构建我的解决方案:我将图片放在名为Images的文件夹中。 MainWindow直接位于项目节点下(它不在任何子目录中)。
确保将图像的构建操作设置为资源,否则它将不适用于WPF资源查找系统(内部使用PACK-Uris:http://msdn.microsoft.com/en-us/library/aa970069(v=vs.110).aspx)
我在VS 2013中使用.NET 4.5。如果您有任何其他问题,请随时提出。
在Bill的评论后更新:
当您的资源位于另一个程序集中时,这是完全不同的事情。引用图像的语法应如下所示:
<Image Source="/ClassLibraryForResources;component/Images/visual studio.png" />
执行以下步骤:
我使用的解决方案结构如下:
这应该与你所描述的类似。再说一遍:它完全是关于WPF使用的PACK URI(参见上面的链接)。