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

Metro/Windows 8+;C#/XAML:如何找到文档库中存储的图片的有效URI?,c#,xaml,file-io,windows-8,microsoft-metro,C#,Xaml,File Io,Windows 8,Microsoft Metro,对于Windows 8,我创建了一个应用程序,可以从web下载图片,并将它们存储在用户文档库中以编程方式创建的子文件夹中 我已将所需的功能和声明添加到应用程序清单中: 文档库作为一项功能启用 添加了jpg的文件类型关联,并在声明中标记为“打开是安全的” 启动应用程序时,所有文件夹和文件都已正确创建,用户可以从文件系统手动打开它们 我的挑战是:当我以编程方式加载所有可用图像并将此图像列表绑定到XAML元素时,我需要一个URI“xxx:///yyy/zzz.jpg“可用于正确设置图像源的。我尝试

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

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

  • 文档库作为一项功能启用
  • 添加了jpg的文件类型关联,并在声明中标记为“打开是安全的”
启动应用程序时,所有文件夹和文件都已正确创建,用户可以从文件系统手动打开它们

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

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

当图片存储在应用程序数据中时,XAML对URI(如“ms”)感到满意-appdata:///local/zzz.jpg". 但我肯定我更喜欢在用户的库中存储图片


谢谢你的帮助

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

           BitmapImage bitmapImage = new BitmapImage();
            await bitmapImage.SetSourceAsync(fileStream);
            MyImage.Source = bitmapImage;
如果要绑定到对象列表,则对象上需要有一个返回BitmapImage数据类型的属性(简化-还需要支持
INotifyPropertyChanged
):

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

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();
var picFolder=Windows.Storage.KnownFolders.PicturesLibrary;
var options=newqueryoptions(CommonFileQuery.DefaultQuery,新列表{.png',.jpg});
options.FolderDepth=FolderDepth.Deep;
var query=picFolder.CreateFileQueryWithOptions(选项);
var files=await query.getfileasync();

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

我不确定用户是否同意您将特定于应用程序的图像放入他们的文档文件夹中。当然,这取决于存储的图像,但如果我下载应用程序的图像,我会将它们保存在应用程序的本地存储中。你没有提到这些是chrome图片,还是真实的内容,所以我不能说这对我来说是绝对不可能的。这些图片实际上是用户创建的内容。它们不是应用程序数据。如果它是用户创建的内容,为什么它不通过文件选择器?实际上,它是关于相反的方向:用户内容已经创建,并且愉快地驻留在库中。内容已保存,例如一周前。当用户返回时,我希望她能够搜索内容。这些图片应该是搜索结果的一部分。非常感谢!这很有帮助!您能否说这种方法是否对数据虚拟化有任何影响?
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();