需求:一个ListBox上需要绑定图片,根据情况设置source,可能是isolatedStorage中的文件,也可能是xap中的文件。
代码如下:
首先是一个Converter的代码,里面有如何从isolatedStorage和xap中读取文件流。
public class StringToImageSource : IValueConverter { #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { try { BitmapImage ret = new BitmapImage(); string filePath = (string)value; using (IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForApplication()) { if (iso.FileExists(filePath)) { // 使用隔离存储中的文件 using (var source = iso.OpenFile(filePath, FileMode.Open, FileAccess.Read)) { ret.SetSource(source); } } else { // 使用资源文件(注意将BuildAction设置为Content) Uri uri = new Uri(filePath, UriKind.RelativeOrAbsolute); StreamResourceInfo sri = Application.GetResourceStream(uri); ret.SetSource(sri.Stream); } return ret; } } catch (Exception) { return null; // 如果发生异常,让图片位置为空 } } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return DependencyProperty.UnsetValue; } #endregion }
xaml绑定这样写:
Source="{Binding Img, Converter={StaticResource StringToImageSource}”