Metro / Windows 8 + C#/ XAML:如何查找存储在文档库中的图片的有效URI?

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

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

  • 文档库作为function启用
  • 添加了jpg的文件类型关联,并在声明中标记了“open is safe”

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

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

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

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

谢谢你的帮助!

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

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

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

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

您可以使用以下代码枚举Pictures文件夹中的文件…

 var picFolder = Windows.Storage.KnownFolders.PicturesLibrary; var options = new QueryOptions(CommonFileQuery.DefaultQuery,new List { ".png", ".jpg" }) ; options.FolderDepth = FolderDepth.Deep; var query = picFolder.CreateFileQueryWithOptions(options); var files = await query.GetFilesAsync(); 

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