Windows Phone 7 Silverlight обязательное изображение из IsolatedStorage - PullRequest
0 голосов
/ 13 сентября 2011

Мне нужно найти способ сохранить изображения в IsolatedStorage и показать их в Silverlight (XAML). Важно: Silverlight должен брать изображение «сам», я не могу установить изображение из кода, который я пробовал ранее,Самое последнее решение состоит в том, чтобы связать байтовый массив и преобразовать их в образ 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 Ответ

1 голос
/ 13 сентября 2011

Во-первых, создайте этот конвертер:

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();
    }
}

Во-вторых, привяжите к своему байту [] с помощью этого конвертера, т. Е. Если вы используете MVVM: Просмотр:

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

Вы можетесделать свойство в contrlol (prop snippet) типа byte [] и прочитать изображение в байтовый массив из isostorage, затем установить для него значение свойства.Если у Вас есть дополнительные вопросы, не стесняйтесь спрашивать меня.

...