1

对于 Windows 8,我创建了一个应用程序,它可以从 Web 下载图片并将它们存储在用户文档库中以编程方式创建的子文件夹中。

我已将所需的功能和声明添加到应用程序清单中:

  • 文档库作为一项功能启用
  • 添加了 jpg 的文件类型关联,并在声明中标记了“打开是安全的”

启动应用程序时,所有文件夹和文件都已正确创建 - 用户可以从文件系统手动打开它们。

我的挑战如下:当我以编程方式加载所有可用图像并将此图像列表绑定到 XAML 元素时,我需要一个可用于正确设置图像源的 URI“xxx:///yyy/zzz.jpg”。我尝试了各种模式风格,包括。“file:///yyy/zzz.jpg”但没有成功。

有没有办法做到这一点,或者根本没有办法?

当图片存储在应用程序数据中时,XAML 对诸如“ms-appdata:///local/zzz.jpg”之类的 URI 感到满意。但我绝对更愿意将图片存储在用户的库中。

谢谢你的帮助!

4

1 回答 1

0

如果要绑定到 Image Source 属性,则无法绑定文件路径。您必须绑定到 BitmapImage 数据类型。如果您直接在代码中设置 Source 属性,它将如下所示:

           BitmapImage bitmapImage = new BitmapImage();
            await bitmapImage.SetSourceAsync(fileStream);
            MyImage.Source = bitmapImage;

如果要绑定到对象列表,则对象需要具有返回 BitmapImage 数据类型的属性(简化 - 您也需要支持INotifyPropertyChanged):

public class MyDataBoundItem
{
   public BitmapImage MyBindableImage {get;set;}
}

您可以使用如下代码枚举图片文件夹中的文件...

var picFolder = Windows.Storage.KnownFolders.PicturesLibrary;
var options = new QueryOptions(CommonFileQuery.DefaultQuery,new List<string> { ".png", ".jpg" }) ;
options.FolderDepth = FolderDepth.Deep;

var query = picFolder.CreateFileQueryWithOptions(options);
var files = await query.GetFilesAsync();

诀窍是,这取决于您要如何加载数据,是从文件中获取相应的文件到每个数据绑定对象中,以便它可以提供 BitmapImage 属性。这是因为 SetSourceAsync 调用是异步的,所以您需要支持 INotifyPropertyChanged 以便绑定对象可以在图像可用时通知 UI。不难,只是不直观。

于 2012-09-03T21:10:48.183 回答