从资源加载时,不会更新Image.Source

时间:2010-05-29 23:44:08

标签: wpf image resources

我在XAML中有这个定义:

<Image Name="AlbumArt" Source="/AlbumChooser2;component/Resources/help.png" />

图像在启动时显示OK。

在我的代码中,我正在寻找要播放的mp3,并在此Image中显示相关的专辑封面。现在,如果没有关联的图像,我想显示“无图像”图像。所以我已经定义了一个并使用以下方法加载它:

BitmapImage noImage = new BitmapImage(
              new Uri("/AlbumChooser2;component/Resources/no_image.png",
                      UriKind.Relative));

我有一个辅助类,如果有一个(如果有BitmapImage那么找到图像),如果没有,则返回null:

if (findImage.Image != null)
{
    this.AlbumArt.Source = findImage.Image; // This works
}
else
{
    this.AlbumArt.Source = noImage; // This doesn't work
}

在找到图像的情况下,更新源并显示专辑封面。在没有找到图像的情况下,我没有显示任何内容 - 只是一个空白。

我认为这不是AlbumArt.Source的设置错误,而是加载了BitmapImage

如果我使用不同的图像(例如原始帮助图像),但即使我重新创建“无图像”图像也不起作用。可能有什么不对?

2 个答案:

答案 0 :(得分:3)

思考/尝试的一些想法:

no_image.png的Visual Studio设置是什么?它是“嵌入式资源”还是“内容”?您是否将其设置为“始终复制”或“如果更新则复制”?

看起来您将图像作为资源引用,但实际上是否已将其添加到项目的资源中?如果它是一个资源,我相信你应该将它的属性设置为“资源”和“永不复制”。

如果您创建UriKind UriKind.Absolute并在磁盘上设置实际文件的路径会怎样?

如果你在调试器中将noImage设置为Source,那么它肯定是非空的并且它具有正确的宽度/高度吗?

答案 1 :(得分:0)

试试这个

Binding Bitmapimge to Image in Wpf?

当wpf编译到.exe资源目录成为你的.exe的一部分,你不能从这段代码访问它

BitmapImage noImage = new BitmapImage(
          new Uri("/AlbumChooser2;component/Resources/no_image.png",
                  UriKind.Relative))

所以您必须使用此代码Resources.no_image.png并将其传递给BitmapImage。

关注REV