Windows Phone 8初学者开发—第15部分:在选中ListItem时播放声音

原文 Windows Phone 8初学者开发—第15部分:在选中ListItem时播放声音

第15部分:在选中ListItem时播放声音

原文地址:  http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners/Part-15-Playing-a-Sound-when-a-ListItem-is-Selected

系列地址: http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners

源代码: http://aka.ms/absbeginnerdevwp8 
PDF版本: http://aka.ms/absbeginnerdevwp8pdf

我们已经用实时数据加载了数据模型,其中重要的是声音文件的位置,其实播放声音是比较容易的。

本课的计划:

  1. 我们将向页面添加一个MediaElement控件,我们不以声明方式设置Source属性,而以编程方式进行设置
  2. 我们将关联到一个事件处理程序,它在每次用户点击不同磁贴时被触发
  3. 在该事件处理程序方法中我们将设置MediaElement控件的属性

1. 向MainPage.xaml添加MediaElement

因为每个PivotItem都需要使用MediaElement,我将在靠近代码的顶部位于LayoutRoot Grid控件的下方添加该控件。

请注意42行,我给MediaElement定义了一个名称,因为我打算在C#中通过编程方式访问它,我将Volume设置为1,它代表最高音量。

2. 处理LongListSelector_SelectionChanged事件

接着我向LongListSelector添加了一个属性,它将在每次磁贴被点击时被触发。我使用了在前面视频中演示的技术来让Visual Studio创建事件处理程序方法的名称和事件处理程序方法的存根。(提示:输入SelectionChanged=",在上下文对话框出现时按Enter键以自动完成代码的其余部分)。代码现在看起来是这样:

导航到代码隐藏文件中该事件处理程序方法,并实现播放与磁贴相关声音的代码:

  1. 这里我们获取与LongListSelector相关的引用。因为在页面中有五个LongListSelector(因为有五个对页面Resources中DataTemplate的引用),我们需要访问用户单击的那个(或者更准确地说,找到LongListSelector中被单击的列表项)。请注意改行末尾的"as LongListSelector"。这是一种数据类型转换形式,sender是object类型变量,但是我们知道它一定是一个LongListSelector。这里使用的"as"关键字将把sender转换为LongListSelector类型。
  2. 我们需要确保selector不为空。虽然可能性不大,但是完全有可能因为某些地方出了问题一些其它的类型传递给了sender。通过防御性编程,我们防范了这种可能性。
  3. 同样,我们需要访问被选中的列表项,所以我们访问selector的SelectItem并尝试将它转换为SoundData类型的对象
  4. 再次,我们需要确保data对象不为空。虽然可能性不大,但是完全有可能因为某些地方出了问题从SelectedItem属性获取了一些其它的类型。通过防御性编程,我们防范了这种可能性。
  5. 现在我们获得了被选中的SoundData,我们将它设置为MediaElement的Source属性。

让我们运行并测试应用程序:

起初它看起来工作得很好,但经过反复测试,我意识到存在一个问题。如果我们再次点击相同的磁贴将听不到声音。这是因为选择没有发生变化,所以事件处理程序没有被触发。

3. 修复选择问题

要解决这个问题,我们需要在播放完成后将SelectedItem重置为空。

重新运行和测试应用程序证明了解决方案的正确性。

回顾

综上所述,本课的重点是如何通过编程的方式处理MediaPlayer元素,做法是设置它的Source属性以动态更改播放的声音。我们学习了"as"关键字,它用于对兼容的引用类型执行转换。在我们的例子中,我们需要将输入属性"object sender"强制转换为LongListSelector以及将SelectedItem转换为DataTemplate 绑定到的类型SoundData。最后,我们学习了如何通过设置SelectedItem属性为空来取消LongListSelector的选中项。

时间: 2024-09-20 09:00:39

Windows Phone 8初学者开发—第15部分:在选中ListItem时播放声音的相关文章

Windows Phone 8初学者开发—第14部分:在运行时绑定到真实的数据

原文 Windows Phone 8初学者开发-第14部分:在运行时绑定到真实的数据 第14部分:在运行时绑定到真实的数据 原文地址:  http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners/Part-14-Binding-to-Real-Data-at-Runtime 系列地址:http://channel9.msdn.com/Series/Windows-Phone-8-Devel

Windows Phone 8初学者开发—第12部分:改进视图模型和示例数据

原文 Windows Phone 8初学者开发-第12部分:改进视图模型和示例数据 第12部分:改进视图模型和示例数据 原文地址:http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners/Part-12-Improving-the-View-Model-and-Sample-Data 系列地址:http://channel9.msdn.com/Series/Windows-Phone-8-

Windows Phone 8初学者开发—第21部分:永久保存Wav音频文件

原文 Windows Phone 8初学者开发-第21部分:永久保存Wav音频文件 第21部分:永久保存Wav音频文件 原文地址:http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners/Part-21-Permanently-Saving-the-Audio-Wav-File 系列地址:http://channel9.msdn.com/Series/Windows-Phone-8-Dev

Windows Phone 8初学者开发—第9部分:Windows Phone 8模拟器概述

原文 Windows Phone 8初学者开发-第9部分:Windows Phone 8模拟器概述 第9部分:Windows Phone 8模拟器概述 原文地址: http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners/Part-9-Overview-of-the-Windows-Phone-8-Emulator 源代码: http://aka.ms/absbeginnerdevwp8

Windows Phone 8初学者开发—第5部分:布局和事件基础

原文 Windows Phone 8初学者开发-第5部分:布局和事件基础 原文地址: http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners/Part-5-Basics-of-Layout-and-Events 系列地址:http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners 源

Windows Phone 8初学者开发—第22部分:用演示图板创建卷盘的动画

原文 Windows Phone 8初学者开发-第22部分:用演示图板创建卷盘的动画 第22部分: 用演示图板创建卷盘的动画 原文地址:http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners/Part-22-Animating-the-Reel-Grid-with-a-Storyboard 系列地址:http://channel9.msdn.com/Series/Windows-Phon

Windows Phone 8初学者开发—第4部分:XAML简介

原文  Windows Phone 8初学者开发-第4部分:XAML简介 原文地址: http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners/Part-4-Introduction-to-XAML 系列地址:http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners 源代码: htt

Windows Phone 8初学者开发—第8部分:理解编译和部署

原文 Windows Phone 8初学者开发-第8部分:理解编译和部署 第8部分:理解编译和部署 原文地址: http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners/Part-8-Understanding-Compilation-and-Deployment 系列地址:http://channel9.msdn.com/Series/Windows-Phone-8-Developmen

Windows Phone 8初学者开发—第3部分:编写第一个Windows Phone 8应用程序

原文 Windows Phone 8初学者开发-第3部分:编写第一个Windows Phone 8应用程序 原文地址: http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners/Part-3-Writing-your-First-Windows-Phone-8-App 系列地址:http://channel9.msdn.com/Series/Windows-Phone-8-Developm