需求:一个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}}”