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。 不难,只是不直观明显。