C# 翻转视图数据绑定和文件权限

C# 翻转视图数据绑定和文件权限,c#,xaml,uwp,windows-10,C#,Xaml,Uwp,Windows 10,我正在学习Windows 10中UWP和应用程序制作的基础知识。 我正在尝试使用从文件夹中提取的数据创建翻转视图。它没有显示任何图像,所以我尝试手动添加这样的图像 PrivateSet_images.Add(new BitmapImage(new Uri("ms-appx:///Assets/Spot/1.png"))); PrivateSet_images.Add(new BitmapImage(new Uri("ms-appx:///Assets/Spot/2.png"))); Priva

我正在学习Windows 10中UWP和应用程序制作的基础知识。 我正在尝试使用从文件夹中提取的数据创建翻转视图。它没有显示任何图像,所以我尝试手动添加这样的图像

PrivateSet_images.Add(new BitmapImage(new Uri("ms-appx:///Assets/Spot/1.png")));
PrivateSet_images.Add(new BitmapImage(new Uri("ms-appx:///Assets/Spot/2.png")));

PrivateSet_images.Add(new BitmapImage(new Uri("ms-appx:///Assets/Spot/jpg.jpg")));
PrivateSet_images.Add(new BitmapImage(new Uri("ms-appx:///Assets/Spot/jpeg.jpeg")));
PrivateSet_images.Add(new BitmapImage(new Uri("ms-appx:///Assets/Spot/jpg.png")));
PrivateSet_images.Add(new BitmapImage(new Uri("ms-appx:///Assets/Spot/jpeg.png")));

PrivateSet_images.Add(new BitmapImage(new Uri("F:\\Test Sp Folder\\1.png")));
PrivateSet_images.Add(new BitmapImage(new Uri("F:/Test Sp Folder/1.png")));
所有ms appx资产都已成功读取和显示(因此不存在文件类型/文件扩展名问题)。至于对文件夹的权限,我使用了文件夹选择器来访问一些文件,因此没有权限问题(如上所述)。我检查了调试器,文件被正确读取,但最后两个文件没有显示(这两个文件指向同一个文件,我想确保它不是阻止它们显示的
'/'
'\\'

XAML代码:

<FlipView x:Name="FlipViwe"  ItemsSource="{x:Bind ViewModel.Images}" Visibility="Visible">
    <FlipView.ItemTemplate>
    <DataTemplate>
        <Image Source="{Binding}" Stretch="Fill"/>
    </DataTemplate> 
    </FlipView.ItemTemplate>
</FlipView>

我似乎无法用解决方案或类似的问题来解决这个问题,比如 我错过了什么?
谢谢。

UWP应用程序无权访问设备上的所有文件。默认情况下,应用程序可以访问某些文件系统位置,例如应用程序安装目录或应用程序数据位置。有关更多信息,请参阅

“F:\Test Sp Folder\1.png”
是应用程序无法直接访问的位置。在UWP中处理文件或文件夹时,一个重要规则是


建议使用
文件夹​Picker
允许用户选择文件夹并将其添加到应用程序中,或者,通过这种方式,以后可以重新加载文件夹,而无需用户通过Picker。有关详细信息,请检查:

UWP应用程序无权访问设备上的所有文件。默认情况下,应用程序可以访问某些文件系统位置,例如应用程序安装目录或应用程序数据位置。有关更多信息,请参阅

“F:\Test Sp Folder\1.png”
是应用程序无法直接访问的位置。在UWP中处理文件或文件夹时,一个重要规则是

建议使用
文件夹​Picker
允许用户选择文件夹并将其添加到应用程序中,或者,通过这种方式,以后可以重新加载文件夹,而无需用户通过Picker。有关详细信息,请检查:

好的, 因此,通过@Jayden的回答,我设法找到了一个解决方案。 来吧, 在UWP应用程序中,使用指向文件*的直接路径可能会失败,原因可能是权限,或者我喜欢说的路径是“虚拟目录”。一个例子是照片或音乐收藏。所有文件都已填充并“发送”到请求应用程序。此外,这些文件可能来自另一个应用程序。因此,存储字符串是毫无意义的

文件的受保护视图由
StorageItems
类提供(即
StorageFolder
StorageFile
StorageItems
是Windows应用商店应用程序的规范存储标识符,而不是路径。如果您根据StorageItems思考和工作,而不是尝试在
StorageItems
和路径之间来回转换,您的生活(和应用程序)将更加轻松。
StorageFile
的一个关键属性是它不限于文件系统对象。例如,
StorageFile
可以表示用户通过文件选择器合同从另一个应用程序中选择的照片“文件”。该应用程序处理
存储文件
,不需要知道或关心数据是来自磁盘还是其他应用程序。相反,需要知道数据来源的应用程序可能会遇到问题:
StorageFile
可能没有路径,也可能没有非文件系统路径

因此,要克服这一问题,必须使用
StorageFile
,这保证了对文件的访问(假设您已经拥有访问权限)。还请记住存储您的访问权限

Windows.Storage.AccessCache
名称空间提供了用于记住
StorageItems
的类,以便以后可以重新加载它们,而无需用户通过选择器。
StorageApplicationPermissions.FutureAccessList
提供对以前使用过的项目的随机访问。
MostRecentlyUsedList
允许保存最近使用的位置列表

在经历了多个例子和无数次尝试之后,我突然想到了这个解决方案,我意识到它类似于一个链接

它不是通过字符串和Uri访问文件,而是使用
StorageFile
处理将文件提供给您的问题。然后通过
OpenAsync
读取文件,并将此流设置为位图图像的源(如所述,向下滚动到使用流源显示图片库中的图像)。我不确定这是一个优化的解决方案,但它的工作。我很想看看是否有更好、优化的解决方案

XAML:


这是我提出的基本解决方案,欢迎任何改进/优化! 谢谢

好的, 因此,通过@Jayden的回答,我设法找到了一个解决方案。 来吧, 在UWP应用程序中,使用指向文件*的直接路径可能会失败,原因可能是权限,或者我喜欢说的路径是“虚拟目录”。一个例子是照片或音乐收藏。所有文件都已填充并“发送”到请求应用程序。此外,这些文件可能来自另一个应用程序。因此,存储字符串是毫无意义的

文件的受保护视图由
StorageItems
类提供(即
StorageFolder
StorageFile
StorageItems
是Windows应用商店应用程序的规范存储标识符,而不是路径。如果您根据StorageItems思考和工作,而不是尝试在
StorageItems
和路径之间来回转换,您的生活(和应用程序)将变得更加轻松。
StorageFile
的一个关键属性是它不限于文件系统对象。例如,
StorageFile
ca
public async void ImageViewGenerateAsync () {
var ImagesFolder = await StorageApplicationPermissions.
                          FutureAccessList.GetFolderAsync("FolderFoken");

var ImgFiles = await ImagesFolder.GetFilesAsync();
foreach( StorageFile file in ImgFiles ) {
    if (file != null ) {
        try {
            var filestream = await file.OpenAsync(FileAccessMode.Read);
            var img = new BitmapImage();

            await img.SetSourceAsync (filestream);
            PrivateSet_images.Add(img);
        }
        catch ( Exception ) {                           
        }
    }
}
<FlipView x:Name="FlipViweSpotlight"  ItemsSource="{x:Bind ViewModel.Images}" Visibility="Visible">
<FlipView.ItemTemplate>
<DataTemplate>
    <Image Source="{Binding}" Stretch="Uniform"/>
</DataTemplate>

</FlipView.ItemTemplate>