Windows Phone 8初学者开发—第15部分:在选中ListItem时播放声音
原文 Windows Phone 8初学者开发—第15部分:在选中ListItem时播放声音
第15部分:在选中ListItem时播放声音
系列地址: http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners
源代码: http://aka.ms/absbeginnerdevwp8
PDF版本: http://aka.ms/absbeginnerdevwp8pdf
我们已经用实时数据加载了数据模型,其中重要的是声音文件的位置,其实播放声音是比较容易的。
本课的计划:
- 我们将向页面添加一个MediaElement控件,我们不以声明方式设置Source属性,而以编程方式进行设置
- 我们将关联到一个事件处理程序,它在每次用户点击不同磁贴时被触发
- 在该事件处理程序方法中我们将设置MediaElement控件的属性
1. 向MainPage.xaml添加MediaElement
因为每个PivotItem都需要使用MediaElement,我将在靠近代码的顶部位于LayoutRoot Grid控件的下方添加该控件。
请注意42行,我给MediaElement定义了一个名称,因为我打算在C#中通过编程方式访问它,我将Volume设置为1,它代表最高音量。
2. 处理LongListSelector_SelectionChanged事件
接着我向LongListSelector添加了一个属性,它将在每次磁贴被点击时被触发。我使用了在前面视频中演示的技术来让Visual Studio创建事件处理程序方法的名称和事件处理程序方法的存根。(提示:输入SelectionChanged=",在上下文对话框出现时按Enter键以自动完成代码的其余部分)。代码现在看起来是这样:
导航到代码隐藏文件中该事件处理程序方法,并实现播放与磁贴相关声音的代码:
- 这里我们获取与LongListSelector相关的引用。因为在页面中有五个LongListSelector(因为有五个对页面Resources中DataTemplate的引用),我们需要访问用户单击的那个(或者更准确地说,找到LongListSelector中被单击的列表项)。请注意改行末尾的"as LongListSelector"。这是一种数据类型转换形式,sender是object类型变量,但是我们知道它一定是一个LongListSelector。这里使用的"as"关键字将把sender转换为LongListSelector类型。
- 我们需要确保selector不为空。虽然可能性不大,但是完全有可能因为某些地方出了问题一些其它的类型传递给了sender。通过防御性编程,我们防范了这种可能性。
- 同样,我们需要访问被选中的列表项,所以我们访问selector的SelectItem并尝试将它转换为SoundData类型的对象
- 再次,我们需要确保data对象不为空。虽然可能性不大,但是完全有可能因为某些地方出了问题从SelectedItem属性获取了一些其它的类型。通过防御性编程,我们防范了这种可能性。
- 现在我们获得了被选中的SoundData,我们将它设置为MediaElement的Source属性。
让我们运行并测试应用程序:
起初它看起来工作得很好,但经过反复测试,我意识到存在一个问题。如果我们再次点击相同的磁贴将听不到声音。这是因为选择没有发生变化,所以事件处理程序没有被触发。
3. 修复选择问题
要解决这个问题,我们需要在播放完成后将SelectedItem重置为空。
重新运行和测试应用程序证明了解决方案的正确性。
回顾
综上所述,本课的重点是如何通过编程的方式处理MediaPlayer元素,做法是设置它的Source属性以动态更改播放的声音。我们学习了"as"关键字,它用于对兼容的引用类型执行转换。在我们的例子中,我们需要将输入属性"object sender"强制转换为LongListSelector以及将SelectedItem转换为DataTemplate 绑定到的类型SoundData。最后,我们学习了如何通过设置SelectedItem属性为空来取消LongListSelector的选中项。
Windows Phone 8初学者开发—第15部分:在选中ListItem时播放声音的更多相关文章
- Windows Phone 8初学者开发—第14部分:在运行时绑定到真实的数据
原文 Windows Phone 8初学者开发—第14部分:在运行时绑定到真实的数据 第14部分:在运行时绑定到真实的数据 原文地址: http://channel9.msdn.com/Series/ ...
- Windows Phone 8初学者开发—第12部分:改进视图模型和示例数据
原文 Windows Phone 8初学者开发—第12部分:改进视图模型和示例数据 第12部分:改进视图模型和示例数据 原文地址:http://channel9.msdn.com/Series/Win ...
- Windows Phone 8初学者开发—第13部分:设置LongListSelector中磁贴的样式
原文 Windows Phone 8初学者开发—第13部分:设置LongListSelector中磁贴的样式 第13部分:设置LongListSelector中磁贴的样式 原文地址: http://c ...
- Windows Phone 8初学者开发—第11部分:设置SounBoard应用程序
原文 Windows Phone 8初学者开发—第11部分:设置SounBoard应用程序 原文地址: http://channel9.msdn.com/Series/Windows-Phone-8- ...
- Windows Phone 8初学者开发—第10部分:数据绑定应用程序和透视应用程序项目模板简介
原文 Windows Phone 8初学者开发—第10部分:数据绑定应用程序和透视应用程序项目模板简介 原文地址: http://channel9.msdn.com/Series/Windows-Ph ...
- Windows Phone 8初学者开发—第9部分:Windows Phone 8模拟器概述
原文 Windows Phone 8初学者开发—第9部分:Windows Phone 8模拟器概述 第9部分:Windows Phone 8模拟器概述 原文地址: http://channel9.ms ...
- Windows Phone 8初学者开发—第8部分:理解编译和部署
原文 Windows Phone 8初学者开发—第8部分:理解编译和部署 第8部分:理解编译和部署 原文地址: http://channel9.msdn.com/Series/Windows-Phon ...
- Windows Phone 8初学者开发—第7部分:本地化应用程序
原文 Windows Phone 8初学者开发—第7部分:本地化应用程序 第7部分:本地化应用程序 原文地址: http://channel9.msdn.com/Series/Windows-Phon ...
- Windows Phone 8初学者开发—第6部分:设置应用程序的样式
原文 Windows Phone 8初学者开发—第6部分:设置应用程序的样式 Source Code: http://aka.ms/absbeginnerdevwp8 PDF Version: ht ...
随机推荐
- python mysql多条插入
程序的目的是把文本里面的数据存储到数据库中,原来的思路是读一条,插入一条,结果就是时间长的不得了...18万条的数据,真是慢. 后来的想法是把所有的记录都读到一个list里,结果是mysql奔溃go ...
- Spring Boot 属性配置和使用
Spring Boot 属性配置和使用 Spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配置文件来注入属性或者修改默认的配置. Spring Boot ...
- BZOJ 1087 互不侵犯King (位运算)
题解:首先,这道题可以用位运算来表示每一行的状态,同八皇后的搜索方法,然后对于限制条件不相互攻击,则只需将新加入的一行左右移动与上一行相&,若是0则互不攻击,方案可行.对于每种方案,则用递推来 ...
- Filter 知识总结
Filter对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压 ...
- Struts2 学习笔记15 Struts标签 part1
来说一下Struts标签,之前我们也很多地方用到了,还是来总结一下. 首先是property标签. <li>property:<s:property value="user ...
- apache添加fastcgi支持
A,安装apache服务器和fastcgi模块支持(ubuntu测试) sudo apt-get install apache2 sudo apt-get install libapache2-mod ...
- cocos2d基础入门
HelloCpp中Classes目录下放开发者自己的类: win32:平台相关,coco2d已默认创建:coco2d-x目录下,samples/cpp/HelloCpp/(工程根目录)图片放置位置:根 ...
- WPF与Winform的选择
最近公司计划对ERP系统全面升级,现有的ERP是简单的bs架构系统打算改版成cs.平时如自己写一些工具,小应用都是用winform就足够.但是界面总是很难看,据了解WPF在这一方面会强一些.因为之前对 ...
- javascript基础、语法
JavaScript基础(简介.语法) 一.JavaScript简介 1.JavaScript是个什么东西? 它是个脚本语言,需要有宿主文件,它的宿主文件是HTML文件. 2.它与Java什么关系? ...
- C-C Radar Installation 解题报告
C-C Radar Installation 解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=86640#pr ...