30天学通C#项目案例开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.5.2 多媒体功能的实现

多媒体功能就是指用户可以通过拖动添加多媒体文件,播放或暂停多媒体文件。要想添加音视频文件,需在资源管理器中选中一个多媒体文件,比如WMV或MP3格式的文件,拖动到相应的音视频区域上面,将触发其容器Grid的Drop事件。以视频为例,当拖动一个WMV到视频窗口上时,其触发的Drop事件处理代码如下所示。

代码位置:见光盘中本章源代码的Controls\ AddNewFriendControl.xaml.cs文件。

01         private void videoGrid_Drop(object sender, DragEventArgs e)
02         {
03            string[] fileNames = e.Data.GetData        //获取拖放的文件名数组
04               (DataFormats.FileDrop, true) as string[];
05            string[] allowableFiles = { ".wmv", ".avi" };
06            if (fileNames.Length > 0)
07            {
08               FileInfo f = new FileInfo(fileNames[0]);
09               //如果文件类型为wmv或avi,则将文件路径赋给MediaElement对象
10               if (allowableFiles.Contains(f.Extension.ToLower()))
11               {
12                  friendContent.VideoUrl = fileNames[0];
13                  videoSrc.Source = null;
14                  videoSrc.Source = new Uri(friendContent.VideoUrl);
15                  MessageBox.Show("已经成功的添加了一个视频\r\n" +
16                               "可以通过所提供的按钮来控制视频!");
17               }
18            }
19            //确保已经处理了事件,那么将不会调用基类的方法处理拖动操作
20            e.Handled = true;
21         }

● 第03~04行代码获取拖动的文件格式。

● 第05行代码指定拖动目标所允许的格式为wmv和avi。

● 第06~10行判断拖动到目标的格式是否为所允许放置的格式。

● 第12~19行代码,将允许放置的文件格式的文件中的第1个文件赋给MediaElement对象的Source。并且将其指定给friendContent的VideoUri属性。最后将e.Handled属性设置为true,表示已经处理了拖放放置操作。

音频部分的拖放操作与视频类似,在Grid的Drop事件中,通过判断拖入的是否是WMA或MP3文件,将文件路径赋给MediaElement对象,代码如下所示。

代码位置:见光盘中本章源代码的Controls\ AddNewFriendControl.xaml.cs文件。

01         private void musicGrid_Drop(object sender, DragEventArgs e)
02         {
03            string[] fileNames =          //获取拖放操作的文件名数组
04               e.Data.GetData(DataFormats.FileDrop, true) as string[];
05            string[] allowableFiles = { ".wma", ".mp3" };
06            if (fileNames.Length > 0)
07            {                             //如果文件名存在
08               FileInfo f = new FileInfo(fileNames[0]);
09               if (allowableFiles.Contains(f.Extension.ToLower()))
10               {                         //判断指定的文件格式是否是所允许放置的格式
11                  friendContent.MusicUrl = fileNames[0];
12                  musicSrc.Source = new Uri(friendContent.MusicUrl);
13                  //拖放操作后,将文件路径赋给MediaElement并设置文本和图片的显示
14                  txtMusic.Visibility = Visibility.Hidden;
15                  imgMusic.Visibility = Visibility.Visible;
16                  MessageBox.Show("已经成功的添加了一个音频文件\r\n" +
17                               "可以使用所提供的按钮来控制音频");
18               }
19            }
20            //确保已经处理了事件,那么将不会调用基类的方法处理拖动操作
21            e.Handled = true;
22         }

● 第03~09行代码获取拖放的文件名数组,判断指定的扩展名是否是允许的扩展名,即是否是MP3或WMA文件。

● 第11~22行代码,将允许的第1个文件赋给friendContent的MusicUrl属性,同时作为MediaElement的Source属性以便控制其播放。

在添加了多媒体文件后,用户可以使用按钮来控制播放与暂停,这是通过调用MediaElement对象的相关方法来实现的,按钮的事件处理代码如下所示。

代码位置:见光盘中本章源代码的Controls\ AddNewFriendControl.xaml.cs文件。

01        private void btnVideoPlay_Click(object sender, RoutedEventArgs e)
02         {
03            videoSrc.Play();              //播放视频
04         }
05         private void btnVideoStop_Click(object sender, RoutedEventArgs e)
06         {
07            videoSrc.Stop();              //停止视频播放
08         }
09         private void btnMusicPlay_Click(object sender, RoutedEventArgs e)
10         {
11            musicSrc.Play();              //播放音频
12         }
13         private void btnMusicStop_Click(object sender, RoutedEventArgs e)
14         {
15            musicSrc.Stop();              //停止音频播放
16         }

● 第01~04行代码用于播放视频文件。

● 第05~08行代码用于停止视频文件的播放。

● 第09~12行代码用于播放音频文件。

● 第13~16行代码用于停止音频文件的播放。