在隔离存储中绑定图像
嘿。 我有一个用户可以搜索的项目列表。 搜索结果显示在列表框中。 每个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
键值对的文件路径的静态字典。