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