Windows Phone开发经验谈(11)-10种选择器详细介绍
启动器和选择器是做Windows phone开发绝对要了解的内容,这一次我准备先大家介绍下选择器,选择器是启动某个系统功能,用户在使用选择器后会将产生的数据回调给程序,举个简单的例子,假设我现在通过PhotoChooserTask选择器选择了一张图片,则用户在选择图片后会将选定的图片以数据流返回给我们的应用。
在Widows Phone 7中提供的选择器有下面几种:
SaveContactTask:保存联系方式
SaveEmailAddressTask:保存电子邮件地址
SavePhoneNumberTask:保存电话号码
SaveRingtoneTask:保存铃声
GameInviteTask:允许应用程序显示一个游戏邀请屏幕,该屏幕允许用户邀请玩家加入多玩家游戏会话。
AddressChooserTask: 选择联系人的地址
CameraCaptureTask:为程序提供拍照的功能
EmailAddressChooserTask:允许用户在联系人选择一个邮箱地址
PhoneNumberChooserTask:允许用户在联系人中选择一个电话号码
PhotoChooserTask:允许用户从照片库里选择一张照片。
当然,在使用这些选择器之前你需要引入Microsoft.Phone.Tasks 名空间,并且任何一个选择器都有个Completed事件,只有通过对该事件的处理,我们才能捕获到用户选择的数据。
GameInviteTask
private void btnDemo_Click(object sender, RoutedEventArgs e) { _gameInviteTask = new GameInviteTask(); _gameInviteTask.Completed += new EventHandler<TaskEventArgs>(_gameInviteTask_Completed); try { // 游戏需要在 Windows Phone 上的 Xbox LIVE 中发布,并且邀请人也要是 Xbox LIVE 的会员 _gameInviteTask.SessionId = "session id"; _gameInviteTask.Show(); } catch (System.InvalidOperationException ex) { MessageBox.Show(ex.ToString()); } } void _gameInviteTask_Completed(object sender, TaskEventArgs e) { switch (e.TaskResult) { case TaskResult.OK: MessageBox.Show("游戏邀请已发送"); break; case TaskResult.Cancel: MessageBox.Show("游戏邀请已取消"); break; case TaskResult.None: MessageBox.Show("游戏邀请无法发送"); break; } }
SaveRingtoneTask
private void btnDemo_Click(object sender, RoutedEventArgs e) { _saveRingtoneChooser = new SaveRingtoneTask(); _saveRingtoneChooser.Completed += new EventHandler<TaskEventArgs>(_saveRingtoneChooser_Completed); try { _saveRingtoneChooser.Source = new Uri("appdata:/Assets/HelloWord.mp3"); // appdata: 代表程序包内 // isostore:/myTone.mp3" isostore: 代表独立存储 // http://www.baidu.com/helloword.mp3" 网络地址 _saveRingtoneChooser.IsShareable = true; _saveRingtoneChooser.DisplayName = "铃声"; _saveRingtoneChooser.Show(); } catch (System.InvalidOperationException ex) { MessageBox.Show(ex.ToString()); } } void _saveRingtoneChooser_Completed(object sender, TaskEventArgs e) { switch (e.TaskResult) { case TaskResult.OK: MessageBox.Show("保存成功"); break; case TaskResult.Cancel: MessageBox.Show("取消保存"); break; case TaskResult.None: MessageBox.Show("无法保存"); break; } }
SavePhoneNumberTask
private void btnDemo_Click(object sender, RoutedEventArgs e) { _savePhoneNumberTask = new SavePhoneNumberTask(); _savePhoneNumberTask.Completed += new EventHandler<TaskEventArgs>(_savePhoneNumberTask_Completed); try { _savePhoneNumberTask.PhoneNumber = "11111111111"; _savePhoneNumberTask.Show(); } catch (System.InvalidOperationException ex) { MessageBox.Show(ex.ToString()); } } void _savePhoneNumberTask_Completed(object sender, TaskEventArgs e) { switch (e.TaskResult) { case TaskResult.OK: MessageBox.Show("保存成功"); break; case TaskResult.Cancel: MessageBox.Show("取消保存"); break; case TaskResult.None: MessageBox.Show("无法保存"); break; } }
SaveEmailAddressTask
private void btnDemo_Click(object sender, RoutedEventArgs e) { _saveEmailAddressTask = new SaveEmailAddressTask(); _saveEmailAddressTask.Completed += new EventHandler<TaskEventArgs>(_saveEmailAddressTask_Completed); try { _saveEmailAddressTask.Email = "abc@msn.com"; _saveEmailAddressTask.Show(); } catch (System.InvalidOperationException ex) { MessageBox.Show(ex.ToString()); } } void _saveEmailAddressTask_Completed(object sender, TaskEventArgs e) { switch (e.TaskResult) { case TaskResult.OK: MessageBox.Show("保存成功"); break; case TaskResult.Cancel: MessageBox.Show("取消保存"); break; case TaskResult.None: MessageBox.Show("无法保存"); break; } }
SaveContactTask
private void btnDemo_Click(object sender, RoutedEventArgs e) { _saveContactTask = new SaveContactTask(); _saveContactTask.Completed += new EventHandler<SaveContactResult>(_saveContactTask_Completed); try { _saveContactTask.FirstName = "web"; _saveContactTask.LastName = "abcd"; _saveContactTask.MobilePhone = "11111111111"; _saveContactTask.Show(); } catch (System.InvalidOperationException ex) { MessageBox.Show(ex.ToString()); } } void _saveContactTask_Completed(object sender, SaveContactResult e) { switch (e.TaskResult) { case TaskResult.OK: MessageBox.Show("保存成功"); break; case TaskResult.Cancel: MessageBox.Show("取消保存"); break; case TaskResult.None: MessageBox.Show("无法保存"); break; } }
AddressChooserTask
private void btnDemo_Click(object sender, RoutedEventArgs e) { _addressChooserTask = new AddressChooserTask(); _addressChooserTask.Completed += new EventHandler<AddressResult>(_addressChooserTask_Completed); try { _addressChooserTask.Show(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } void _addressChooserTask_Completed(object sender, AddressResult e) { if (e.TaskResult == TaskResult.OK) { MessageBox.Show("“" + e.DisplayName + "”的地址是:" + e.Address); } }
CameraCaptureTask
CameraCaptureTask cct = new CameraCaptureTask(); cct.Completed += new EventHandler<PhotoResult>(cct_Completed); cct.Show(); void cct_Completed(object sender, PhotoResult e) { BitmapImage bmp = new BitmapImage(); bmp.SetSource(e.ChosenPhoto); image1.Source = bmp; //image控件 }
EmailAddressChooserTask:
EmailAddressChooserTask eact = new EmailAddressChooserTask(); eact.Completed += new EventHandler<EmailResult>(eact_Completed); eact.Show(); void eact_Completed(object sender, EmailResult e) { var Block= e.Email; }
PhoneNumberChooserTask
PhoneNumberChooserTask pnct = new PhoneNumberChooserTask(); pnct.Completed += new EventHandler<PhoneNumberResult>(pnct_Completed); pnct.Show(); void pnct_Completed(object sender, PhoneNumberResult e) { var Block = e.PhoneNumber; }
PhotoChooserTask
PhotoChooserTask pct = new PhotoChooserTask(); pct.Completed += new EventHandler<PhotoResult>(pct_Completed); pct.Show(); void pct_Completed(object sender, PhotoResult e) { BitmapImage bmp = new BitmapImage(); bmp.SetSource(e.ChosenPhoto); image2.Source = bmp; }
是不是很简单...每个选择器都是设置好后通过show方法调用..然后通过Complete获取结果.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器