Image Source绑定到本地存储中的文件

时间:2013-03-01 15:09:59

标签: c# wpf image xaml windows-phone-8

在Windows Metro Apps(C#)中,我使用ValueConverter传递Image-Uri,如下所示:

public class ProfileImage : IValueConverter {

    public Object Convert(Object value, Type targetType, Object parameter, String language) {

        if (value == null) {
            return "Common/images_profile/user.png";
        }

        return "ms-appdata:///local/" + (String)value;

    }

    public Object ConvertBack(Object value, Type targetType, Object parameter, String language) {
        return value;
    }

}

XAML:

<Image x:Name="profileImage" Height="80" Width="80" Source="{Binding Path, Converter={StaticResource ProfileImage}}"/>

图像正在异步下载到localFolder。

我想在Windows Phone 8上使用它 - 但它不会显示任何图像。

var localFolder = ApplicationData.Current.LocalFolder;
StorageFile myFile = await localFolder.CreateFileAsync(
    UID + ".jpg",
    CreationCollisionOption.FailIfExists);

using (var s = await myFile.OpenStreamForWriteAsync()) {
    s.Write(imageBytes, 0, imageBytes.Length);
}

用于将图像写入LocalStorage。

如果value中没有内容,Common/images_profile/user.png中的图片正在正确显示。这个是在包中,而不是在本地文件夹中。

我需要知道我必须使用哪种格式作为返回参数才能显示图像。

2 个答案:

答案 0 :(得分:1)

我认为网址方案 ms-appdata:/// 无处不在。

我正在使用这个对流器来绑定来自隔离存储的图像:

public class PathToImageConverter : IValueConverter
{
    private static IsolatedStorageFile isoStorage = IsolatedStorageFile.GetUserStoreForApplication();

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string path = value as string;

        if (string.IsNullOrEmpty(path))
            return null;

        if ((path.Length > 9) && (path.ToLower().Substring(0, 9).Equals("isostore:")))
        {
            using (var sourceFile = isoStorage.OpenFile(path.Substring(9), FileMode.Open, FileAccess.Read))
            {
                BitmapImage image = new BitmapImage();
                image.SetSource(sourceFile);

                return image;
            }
        }
        else
        {
            BitmapImage image = new BitmapImage(new Uri(path));

            return image;
        }
    }

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

对于绑定,您必须在网址中使用 isostore:前缀。

答案 1 :(得分:0)

这里一定要遗漏一些东西..为什么不使用StorageFile.Path而不是返回&#34;返回&#34; ms-appdata:/// local /&#34; +(字符串)值;&#34;

意识到它的#WP8是另一回事。您仍然可以使用独立存储和Silverlight Uri