UWP:从 'get; & set;' 中的 FilePath 设置 image.source

UWP: Setting the image.source from FilePath in the 'get; & set;'

集合中的每个图像都有一个序列化的文件路径。加载集合时,我需要从文件路径加载图像。下面的代码将不起作用,因为 IsolatedStorageFileStream 与用于 image.SetSource() 的 IRandomAccessStream 不兼容。

public BitmapImage Image
    {
        get
        {
            var image = new BitmapImage();
            if (FilePath == null) return null;

            IsolatedStorageFileStream stream = new IsolatedStorageFileStream(FilePath, FileMode.Open, FileAccess.Read, IsolatedStorageFile.GetUserStoreForApplication());

            image.SetSource(stream);

            return image;
        }
    }

是否有替代代码来完成此操作?

您可以简单地使用 WindowsRuntimeStreamExtensions.AsRandomAccessStream 扩展方法:

using System.IO;
...

using (var stream = new IsolatedStorageFileStream(
    FilePath, FileMode.Open, FileAccess.Read,
    IsolatedStorageFile.GetUserStoreForApplication()))
{
    await image.SetSourceAsync(stream.AsRandomAccessStream());
}

当我测试这个 SetSource 时阻止了应用程序,所以我使用了 SetSourceAsync


您或许也可以像这样直接访问独立存储文件夹:

var file = await ApplicationData.Current.LocalFolder.CreateFileAsync(
    FilePath, CreationCollisionOption.OpenIfExists);

using (var stream = await file.OpenReadAsync())
{
    await image.SetSourceAsync(stream);
}