2009-10-12 55 views
9

我有一个Image控件,其中包含嵌入图像的路径(构建操作“资源”)。在UserControl中不显示嵌入图像

<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" /> 

在设置构建动作时正常工作到'内容',但使用'资源'时不起作用。问题是明确地说它是在文件结构中的相对位置,因为添加../工作正常。如果可能的话,我仍然想要一个解决方案从程序集中获取图像

回答

16

您必须将其作为资源引用,而不仅仅是路径。 这是它是如何在WPF应用程序进行:

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

原始图像位于图像/ image.png

注:
我在Silverlight没有经验,但你说它可能类似于WPF,所以我建议这...

0

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

8

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

0

只有当网站的根目录不在子目录内时,使用'/'才能到达站点的根目录。即:管理站点作为主站点的子目录(http://www.somesite.com/admin)。在这种情况下,使用'/assets/images/image.png'会先到达父站点。您可以像这样引用图像:'〜/ assets/images/image.png'

3

如果您需要将其构建类型从“内容”更改为“资源”,请尝试构建清理。我拥有完全正确的一切(通往其他项目的资源,构建类型等),但直到我向images文件夹添加了一个新映像,这可能会清除旧的状态,它才会起作用。

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

0

我也发现当一个图像具有需要在文件名中编码的特殊字符时,比如“+”,它被编码为%2b也会导致该问题。

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

相关问题