博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
wp8.1 Study14 FilePicker简单介绍
阅读量:6364 次
发布时间:2019-06-23

本文共 4537 字,大约阅读时间需要 15 分钟。

一、FileOpenPicker/FileSavePicker介绍

  这个在使用手机中是十分经常的,如在朋友圈中你要发图片,首先点击添加图片,而后你会进入手机图片区,选择图片后自动返回朋友圈准备发图界面。简单的步骤演示如下图所示:

  它允许App获取手机中任何类型的文件,可以不通过KnownFoldersAPI从Pictures库及Vedio库获得相应文件。

 

二、简单例子

  在页面中,放入一个Image控件及一个叫Pick的Button控件,假设想点击pick,然后进入选择图片库,选择一个图片,然后Image控件显示相应选择的图片。

pick点击事件C#代码如下:

private void pick_Click(object sender, RoutedEventArgs e)        {            //创造一个picker对象            var file = new FileOpenPicker();            //picker打开文件类型            file.FileTypeFilter.Add(".jpg");            file.FileTypeFilter.Add(".jpeg");            file.FileTypeFilter.Add(".png");            //打开picker获取一个文件            file.ContinuationData["Operation"] = "UpdateProfilePicture";//这个为了后面保存图片的操作            file.PickSingleFileAndContinue();        }

Pick 一个文件后,还需要在App.xaml.cs重写Activate方法,代码如下:

protected override void OnActivated(IActivatedEventArgs args){    if (args is FileOpenPickerContinuationEventArgs)    {        Frame rootFrame = Window.Current.Content as Frame;        if (rootFrame == null)        {            // 创建要充当导航上下文的框架,并导航到第一页            rootFrame = new Frame();            // TODO: 将此值更改为适合您的应用程序的缓存大小            rootFrame.CacheSize = 1;            Window.Current.Content = rootFrame;        }         // Standard Frame initialization code ...        if (!rootFrame.Navigate(typeof(Page1)))        {            throw new Exception("Failed to create target page");        }        var p = rootFrame.Content as Page1;        p.FilePickerEvent = (FileOpenPickerContinuationEventArgs)args;        // Ensure the current window is active        Window.Current.Activate();    }}

最后还需要在页面中加入一下代码

private FileOpenPickerContinuationEventArgs _filePickerEventArgs = null;        public FileOpenPickerContinuationEventArgs FilePickerEvent        {            get { return _filePickerEventArgs; }            set            {                _filePickerEventArgs = value;                ContinueFileOpenPicker(_filePickerEventArgs);            }        }        private async void ContinueFileOpenPicker(FileOpenPickerContinuationEventArgs _filePickerEventArgs)        {            if ((_filePickerEventArgs.ContinuationData["Operation"] as string) == "UpdateProfilePicture" && _filePickerEventArgs.Files != null && _filePickerEventArgs.Files.Count > 0)            {                StorageFile file = _filePickerEventArgs.Files[0];                string mrutoken = StorageApplicationPermissions.MostRecentlyUsedList.Add(file, "20141201");//mrucache保存选择图片记录                IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);                BitmapImage bitmapImage = new BitmapImage();                bitmapImage.SetSource(fileStream);                imageshow.Source = bitmapImage;                            }

注:还可以使用SavePicker ,使用如上,代码如下:

//Create the picker objectFileSavePicker savePicker = new FileSavePicker();// Dropdown of file types the user can save the file as   savePicker.FileTypeChoices.Add(    "Plain Text", new List
() { ".txt" });// Default file name if the user does not type one in or select // a file to replacesavePicker.SuggestedFileName = "New Document";// Open the picker for the user to pick a filesavePicker.ContinuationData["Operation"] = "SomeDataOrOther";savePicker.PickSingleFileAndContinue();

 

三、Windows.Storage.AccessCache

  这是让使用者能快速重新打开之前打开过的文件的缓存,我们可以使用FutureAccessList 和 MostRecentlyUsedList,其中MostRecentlyUsedList是一个记录着经常使用的文件的列表,而FutureAccessList是一个可以保存文件以便以后的使用的列表。当使用者pick一个文件等,App需要把其加入以上两个列表记录。

  在 ContinueFileOpenPicker()方法添加

// Add to MRU with metadata (For example, a string that represents the date)        string mruToken = StorageApplicationPermissions.MostRecentlyUsedList.Add(file, "20120716");        // Add to FA without metadata        string faToken = StorageApplicationPermissions.FutureAccessList.Add(file);

而每当需要使用列表时,可以这样调用代码:

//  get the token for the first item in our MRU and use it to retrieve a StorageFile that represents that fileString mruFirstToken = StorageApplicationPermissions.MostRecentlyUsedList.Entries.First().Token;StorageFile retrievedFile = await StorageApplicationPermissions.MostRecentlyUsedList.GetFileAsync(mruFirstToken);...// Retrieve tokens for all items in the MRUAccessListEntryView mruEntries = StorageApplicationPermissions.MostRecentlyUsedList.Entries;if (mruEntries.Count > 0){    foreach (AccessListEntry entry in mruEntries)    {        String mruToken = entry.Token;        // Continue processing the MRU entry        ...    }}

 

转载于:https://www.cnblogs.com/NEIL-X/p/4191908.html

你可能感兴趣的文章
QT 学习 之 窗口拖拽 实现
查看>>
PHP的ftp文件,多文件上传操作类
查看>>
js中清空数组的方法
查看>>
python def说明
查看>>
Java根据IP获取国家省级地市信息
查看>>
自动安装系统及网络安装服务
查看>>
常见的Python语言IOError错误原因?
查看>>
好程序员web前端培训分享HTML基本结构和基本语法
查看>>
好程序员web前端分享前端的开发规范
查看>>
11g RAC 更改归档模式 ,归档文件存放在ASM 磁盘组
查看>>
Visual Studio安装项目中将用户选择的安装路径写入注册表的方法[转]
查看>>
【转载】VBA:调用文件夹对话框的几种方法
查看>>
centos rm命令恢复删除的文件
查看>>
eclipse修改源码导出jar包
查看>>
5、根文件系统原理
查看>>
回档|过河
查看>>
perspective transform透视矩阵快速求法+矩形矫正
查看>>
go语言中在变量后加上接口是什么意思?
查看>>
day5-iptables
查看>>
版本配置
查看>>