在隔离存储中绑定图像

嘿。 我有一个用户可以搜索的项目列表。 搜索结果显示在列表框中。 每个animal对象都有一个到隔离存储中的图像的路径。 将listboxitem中的Image控件绑定到隔离存储中的图像的最快方法是什么? 我见过的例子倾向于显示来自互联网的图像而不是隔离存储。 如果我有大约10张图像,它似乎会占用所有内存并崩溃。 谢谢

编辑:

我在我的BitmapConverter类中使用它(inheritanceIValueConverter)

  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value !=null) { BitmapImage bitmapImage = new BitmapImage(); bitmapImage.SetSource(new MemoryStream((Byte[]) value)); return bitmapImage; } else { return null; } } 

我在AppResource.xaml文件的顶部有这个:

   In my style, within the AppResource.xaml file:  

我在我的BitmapConverter中设置了一个断点,但它从未被调用过。 我之前从未使用过IValueConverter,所以任何帮助都会很棒。 谢谢

显示的代码中存在一些问题。 您的示例中可能只丢失了一些内容:

首先,您对转换器的绑定没有指定要绑定的内容以获取其值,因此永远不会调用它。 它至少需要一个Path =(或简称一个属性名称作为快捷方式),否则将不会调用转换器。 你在哪里设置列表的ItemSource?

其次,传递的值是字符串文件名。 您的转换器需要将它们用作文件名,并根据该名称打开流。 目前它正在尝试将名称用作字节数组。

最后,如果图像是一个固定的集合,将它们存储在ClientBin下的图像文件夹中更简单,只需使用以下路径语法“/images/imagename.jpg”等来引用它们。这将涉及浏览器的缓存自动。 你不需要转换器。 (关键是前导“/”。没有Silverlight假定图像在当前模块中)

替代文字

下面是一个完整的示例,使用ClientBin / images文件夹中显示的图像,在运行时看起来像这样:

替代文字

示例Xaml文件:

              

后面的示例代码是:

 using System.Collections.Generic; using System.Windows.Controls; namespace SilverlightApplication1 { public partial class IsoImages : UserControl { public IsoImages() { InitializeComponent(); List images = new List() { new ImageItem("/images/Image1.jpg"), new ImageItem("/images/Image2.jpg"), new ImageItem("/images/Image3.jpg"), new ImageItem("/images/Image4.jpg") }; this.ImageList.ItemsSource = images; } } public class ImageItem { public string Filename{ get; set; } public ImageItem( string filename ) { Filename = filename; } } } 

您可能正在耗尽内存,因为您反复将相同的文件加载到新的BitmapSource对象中。 您应该只为每个文件创建一个“大约10”个BitmapSource对象。 然后通过将它们分配给Image.Source属性来Image.Source这些BitmapSource实例。

一种方法是使用IValueConverter的实现,该实现维护BitmapSource键值对的文件路径的静态字典。