在模块中查看不显示图像但会显示文本

时间:2014-08-27 03:55:23

标签: wpf image mef

我正在使用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个小时试图解决这个问题并且很难过。我将不胜感激任何帮助。

谢谢, 比尔

2 个答案:

答案 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直接位于项目节点下(它不在任何子目录中)。

enter image description here

确保将图像的构建操作设置为资源,否则它将不适用于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" />

执行以下步骤:

  1. 以斜线“/”
  2. 开头
  3. 指定保存资源的程序集的名称(也可以是强大的程序集名称)
  4. 继续使用“; component /”
  5. 以图像(或其他资源)的路径结束 (请注意,您必须省略引号)。
  6. 我使用的解决方案结构如下:

    enter image description here

    这应该与你所描述的类似。再说一遍:它完全是关于WPF使用的PACK URI(参见上面的链接)。