设为首页 收藏本站
查看: 1032|回复: 0

重新想象 Windows 8 Store Apps (26)

[复制链接]

尚未签到

发表于 2015-5-23 07:48:50 | 显示全部楼层 |阅读模式
  [源码下载]




重新想象 Windows 8 Store Apps (26) - 选取器: 自定义文件选取窗口, 自定义文件保存窗口  
作者:webabcd

介绍
重新想象 Windows 8 Store Apps 之 选取器


  • FileOpenPickerUI - 自定义文件打开选取器
  • FileSavePickerUI - 自定义文件保存选取器
  
示例
1、 开发一个自定义文件选取窗口。注:如果需要激活自定义的文件选取窗口,请在弹出的选取器窗口的左上角选择对应 Provider
Picker/MyOpenPicker.xaml












  Picker/MyOpenPicker.xaml.cs



/*
* 演示如何开发自定义文件打开选取器
*
* 1、在 Package.appxmanifest 中新增一个“文件打开选取器”声明,并做相关配置
* 2、在 App.xaml.cs 中 override void OnFileOpenPickerActivated(FileOpenPickerActivatedEventArgs args),如果 app 是由文件打开选取器激活的,则可以在此获取其相关信息
*
* FileOpenPickerActivatedEventArgs - 通过“文件打开选取器”激活应用程序时的事件参数
*     FileOpenPickerUI - 获取 FileOpenPickerUI 对象
*     PreviousExecutionState, Kind, SplashScreen - 各种激活 app 的方式的事件参数基本上都有这些属性,就不多说了
*     
* FileOpenPickerUI - 自定义文件打开选取器的帮助类
*     AllowedFileTypes - 允许的文件类型,只读
*     SelectionMode - 选择模式(FileSelectionMode.Single 或 FileSelectionMode.Multiple)
*     Title - 将在“自定义文件打开选取器”上显示的标题
*     CanAddFile(IStorageFile file) - 是否可以将指定的文件添加进选中文件列表
*     AddFile(string id, IStorageFile file) - 将文件添加进选中文件列表,并指定 id
*     ContainsFile(string id) - 选中文件列表中是否包含指定的 id
*     RemoveFile(string id) - 根据 id 从选中文件列表中删除对应的文件
*     FileRemoved - 从选中文件列表中删除文件时触发的事件
*     Closing - 用户关闭“自定义文件打开选取器”时触发的事件
*/
using System;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.Storage;
using Windows.Storage.Pickers.Provider;
using Windows.Storage.Provider;
using Windows.Storage.Streams;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
namespace XamlDemo.Picker
{
public sealed partial class MyOpenPicker : Page
{
private FileOpenPickerUI _fileOpenPickerUI;
public MyOpenPicker()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
// 获取 FileOpenPickerUI 对象
var args = (FileOpenPickerActivatedEventArgs)e.Parameter;
_fileOpenPickerUI = args.FileOpenPickerUI;
_fileOpenPickerUI.Title = "自定义文件打开选取器";
// _fileOpenPickerUI.Closing += _fileOpenPickerUI_Closing;
// _fileOpenPickerUI.FileRemoved += _fileOpenPickerUI_FileRemoved;
        }
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
// _fileOpenPickerUI.Closing -= _fileOpenPickerUI_Closing;
// _fileOpenPickerUI.FileRemoved -= _fileOpenPickerUI_FileRemoved;
        }
// 选择一个本地文件
private async void btnPickLocalFile_Click_1(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
/*
* 注意:
* 1、选择的文件的扩展名必须匹配 FileOpenPicker.FileTypeFilter 中的定义
* 2、如果通过 KnownFolders.DocumentsLibrary 等选择文件,除了要在 Package.appxmanifest 选择对应的“库”功能外,还必须在 Package.appxmanifest 中的“文件类型关联”声明中增加对相应的的扩展名的支持
*/
StorageFile file = await Package.Current.InstalledLocation.GetFileAsync(@"Assets\Logo.png");
AddFileResult result = _fileOpenPickerUI.AddFile("myFile", file);
lblMsg.Text = "选择的文件: " + file.Name;
lblMsg.Text += Environment.NewLine;
lblMsg.Text += "AddFileResult: " + result.ToString();
}
// 选择一个远程文件
private async void btnPickRemoteFile_Click_1(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
Uri uri = new Uri("http://images.iyunv.com/mvpteam.gif", UriKind.Absolute);
// 扩展名必须匹配 FileOpenPicker.FileTypeFilter 中的定义
StorageFile file = await StorageFile.CreateStreamedFileFromUriAsync("mvp.gif", uri, RandomAccessStreamReference.CreateFromUri(uri));
AddFileResult result = _fileOpenPickerUI.AddFile("myFile", file);
lblMsg.Text = "选择的文件: " + file.Name;
lblMsg.Text += Environment.NewLine;
lblMsg.Text += "AddFileResult: " + result.ToString();
}
}
}
  判断程序是否是由文件打开选取器激活,在 App.xaml.cs 中 override void OnFileOpenPickerActivated(FileOpenPickerActivatedEventArgs args)



// 通过文件打开选取器激活应用程序时所调用的方法
protected override void OnFileOpenPickerActivated(FileOpenPickerActivatedEventArgs args)
{
var rootFrame = new Frame();
rootFrame.Navigate(typeof(XamlDemo.Picker.MyOpenPicker), args);
Window.Current.Content = rootFrame;
Window.Current.Activate();
}
  
2、 开发一个自定义文件保存窗口。注:如果需要激活自定义的文件保存窗口,请在弹出的选取器窗口的左上角选择对应 Provider
Picker/MySavePicker.xaml










  Picker/MySavePicker.xaml.cs



/*
* 演示如何开发自定义文件保存选取器
*
* 1、在 Package.appxmanifest 中新增一个“文件保存选取器”声明,并做相关配置
* 2、在 App.xaml.cs 中 override void OnFileSavePickerActivated(FileSavePickerActivatedEventArgs args),如果 app 是由文件保存选取器激活的,则可以在此获取其相关信息
*
* FileSavePickerActivatedEventArgs - 通过“文件保存选取器”激活应用程序时的事件参数
*     FileSavePickerUI - 获取 FileSavePickerUI 对象
*     PreviousExecutionState, Kind, SplashScreen - 各种激活 app 的方式的事件参数基本上都有这些属性,就不多说了
*     
* FileSavePickerUI - 自定义文件保存选取器的帮助类
*     AllowedFileTypes - 允许的文件类型,只读
*     Title - 将在“自定义文件保存选取器”上显示的标题
*     FileName - 需要保存的文件名(包括文件名和扩展名),只读
*     TrySetFileName(string value) - 尝试指定需要保存的文件名(包括文件名和扩展名)
*     FileNameChanged - 用户在文件名文本框中更改文件名或在文件类型下拉框中更改扩展名时触发的事件
*     TargetFileRequested - 用户提交保存时触发的事件(事件参数:TargetFileRequestedEventArgs)
*     
* TargetFileRequestedEventArgs
*     Request - 返回 TargetFileRequest 对象
*     
* TargetFileRequest
*     TargetFile - 目标文件对象,用于返回给 client
*     GetDeferral() - 获取异步操作对象,同时开始异步操作,之后通过 Complete() 通知完成异步操作
*/
using System;
using Windows.ApplicationModel.Activation;
using Windows.Storage;
using Windows.Storage.Pickers.Provider;
using Windows.UI.Core;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
namespace XamlDemo.Picker
{
public sealed partial class MySavePicker : Page
{
private FileSavePickerUI _fileSavePickerUI;
public MySavePicker()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
// 获取 FileSavePickerUI 对象
var args = (FileSavePickerActivatedEventArgs)e.Parameter;
_fileSavePickerUI = args.FileSavePickerUI;
_fileSavePickerUI.Title = "自定义文件保存选取器";
_fileSavePickerUI.TargetFileRequested += _fileSavePickerUI_TargetFileRequested;
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
_fileSavePickerUI.TargetFileRequested -= _fileSavePickerUI_TargetFileRequested;
}
private async void _fileSavePickerUI_TargetFileRequested(FileSavePickerUI sender, TargetFileRequestedEventArgs args)
{
// 异步操作
var deferral = args.Request.GetDeferral();
try
{
// 在指定的地址新建一个没有任何内容的空白文件
StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(sender.FileName, CreationCollisionOption.GenerateUniqueName);
// 设置 TargetFile,“自定义文件保存选取器”的调用端会收到此对象
args.Request.TargetFile = file;
}
catch (Exception ex)
{
// 输出异常信息
                OutputMessage(ex.ToString());
}
finally
{
// 完成异步操作
                deferral.Complete();
}
}
private async void OutputMessage(string msg)
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
lblMsg.Text = msg;
});
}
}
}
  判断程序是否是由文件保存选取器激活,在 App.xaml.cs 中 override void OnFileSavePickerActivated(FileSavePickerActivatedEventArgs args)



// 通过文件保存选取器激活应用程序时所调用的方法
protected override void OnFileSavePickerActivated(FileSavePickerActivatedEventArgs args)
{
var rootFrame = new Frame();
rootFrame.Navigate(typeof(XamlDemo.Picker.MySavePicker), args);
Window.Current.Content = rootFrame;
Window.Current.Activate();
}
  
OK
[源码下载]

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-69674-1-1.html 上篇帖子: Windows Phone 8初学者开发—第8部分:理解编译和部署 下篇帖子: Windows 8实用窍门系列:18.windows 8开发模拟器和windows 8程序中关联文件类型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表