来自IsolatedStorage的Windows Phone 7 Silverlight绑定映像

时间:2011-09-13 10:48:36

标签: silverlight windows-phone-7 isolatedstorage

我需要找到将图像保存到IsolatedStorage的方法并向他们展示Silverlight(XAML) 重要:Silverlight必须拍摄“自己”的图像,我无法从后面的代码中设置图像 我之前尝试了很多解决方案。 最后一个解决方案是绑定字节数组并将它们转换为Image XAML

StackPanel Orientation="Horizontal" Margin="0,0,0,20">
                                <Image  Width="110" CacheMode="BitmapCache" Source="{Binding ThumbLocal,Converter={StaticResource imgConverter}}"  
                                        Margin="12,0,9,0"/>
                                <StackPanel Width="311">

背后的代码

public byte[] ThumbLocal
        {
            get;
            set;
        }


public class ByteImageConverter : IValueConverter
    {

           public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            MemoryStream memStream = new MemoryStream((byte[])value);
            memStream.Seek(0, SeekOrigin.Begin);
            BitmapImage thumbLocal = new BitmapImage();
            thumbLocal.SetSource(memStream);
            return thumbLocal;
        }
    }

一切正常,直到我将byte[]保存到数据库并尝试检索。 到现在为止,我可以看到将图像作为文件保存到IsolatedStorage的唯一选项,然后检索并转换为byte[]。 这是“智能”解决方案吗?

1 个答案:

答案 0 :(得分:1)

首先,创建此转换器:

public class BinaryToImageSourceConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value != null && value is byte[])
        {
            var bytes = value as byte[];
            var stream = new MemoryStream(bytes);
            var image = new BitmapImage();

            image.SetSource(stream);
            stream.Close();
            return image;
        }
        return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

其次,使用此转换器绑定到您的byte [],即如果您使用的是MVVM: 视图:

<Image Source="{Binding IsolatedStorageImage, Converter={StaticResource BinaryToImageSourceConverter}}" x:Name="ScanImage"/>

您可以在contrlol(prop snippet)类型byte []中创建属性,并从isostorage读取图像到字节数组,然后将属性值设置为它。 如果您有更多问题,请随时问我。