嵌入的图像在UserControl中不显示

时间:2009-10-12 11:45:48

标签: wpf silverlight xaml image

我有一个Image控件,其中包含嵌入图像的路径(构建操作'资源')。

<Image Source="Assets/images/image.png" Stretch="None" />

如果我将其添加到MainPage.xaml中的容器中,则图像显示正常。如下所示在UserControl中具有相同的图像,然后在MainPage.xaml上添加该UserControl的实例时,图像不会出现。

<UserControl x:Class="HomePage.Views.SimpleUserContol"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
    <Grid x:Name="LayoutRoot" >
        <Image Source="Assets/images/image.png" Stretch="None" />
    </Grid>
</UserControl>

任何人都可以解释为什么会发生这种情况,并且可能会指出我的解决方案。

干杯,J

(我在Silverlight工作,但认为在WPF中可能会发生同样的事情)

修改

设置

<Image Source="/Assets/images/image.png" Stretch="None" />

在将构建操作设置为“内容”时工作正常,但在使用“资源”时不起作用。问题肯定是它在文件结构中的相对位置,因为add ../工作正常。如果可能的话,我仍然想要一个从装配中获取图像的解决方案

7 个答案:

答案 0 :(得分:17)

您必须将其作为资源引用,而不仅仅是路径。 这是在WPF应用程序中完成的方式:

<Image Source="/MyAppName;component/images/image.png" Stretch="None" />

原始图片位于 images / image.png

注意:
我没有SilverLight的经验,但是你说它可能与WPF类似,所以我建议这个......

答案 1 :(得分:8)

您正在使用图像的相对路径。如果您的UserControl位于子目录中,则相对路径不再有效。您应该使用绝对路径,如"/Assets/images/image.png""pack://application:,,,/Assets/images/image.png"(如果您的UserControl将由另一个程序集使用,请使用此最后一个版本)

答案 2 :(得分:3)

如果您需要将其构建类型从“内容”更改为“资源”,请尝试构建清理。我把一切都完全正确(其他项目资源的路径,构建类型等等),但是在我向images文件夹中添加了一个新图像之前它没有用,这可能会清除旧的状态。

实际上,手动删除图像所在项目中的bin和obj文件夹。

答案 3 :(得分:0)

我认为这个问题与你的图像嵌入到资源(从逻辑路径到它)中的“虚拟”命名空间以及与你的usercontrol命名空间的区别有关。

答案 4 :(得分:0)

使用“/”来访问网站的根目录只有在网站的根目录不在子目录中时才有效。即:管理站点作为主站点的子目录(http://www.somesite.com/admin)。在这种情况下,使用'/assets/images/image.png'将首先转到父站点。您可以像这样引用图像:'〜/ assets / images / image.png'

答案 5 :(得分:0)

我还发现当图片中有特殊字符需要在文件名中编码时,比如“+”,编码%2b也会导致问题。

我建议重命名任何可能包含转义字符的图片。

答案 6 :(得分:0)

我遇到了这个问题,我尝试将图像移入和移出Canvas,以及在Canvas容器中上下移动。我什至尝试操纵panel.zindexes无济于事。我正在使用source =“ / images / map.jpg”。图像文件夹是通过右键单击项目并添加文件夹创建的,因此它位于资源文件夹下方。 解决了:我导航到Windows资源管理器中的images文件夹,并使用alt + d和ctrl + c来复制带有这些\的文件位置,而不是使用这些/,它起作用了。