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

posted on 2012-05-23 15:22  MainTao  阅读(599)  评论(1编辑  收藏