XAML文件里定义了MediaElement控件,LoadedBehavior=”Manual” UnloadedBehavior=”Pause”;
<MediaElement x:Name="mySoundPlayer" DataContext="{Binding}" LoadedBehavior="Manual" UnloadedBehavior="Pause" > <MediaElement.Triggers> <EventTrigger RoutedEvent="MediaElement.Loaded"> <EventTrigger.Actions> <BeginStoryboard> <Storyboard> <!-- The MediaTimeline has a RepeatBehavior="Forever" which makes the media play over and over indefinitely.--> <MediaTimeline Source="{Binding BgMusicPath}" Storyboard.TargetName="mySoundPlayer" RepeatBehavior="Forever" /> </Storyboard> </BeginStoryboard> </EventTrigger.Actions> </EventTrigger> </MediaElement.Triggers> </MediaElement>
也定义了获取文件的方法
private void playSound() { BgMusic bm = new BgMusic(); bm.BgMusicPath = cBackMusic ; mySoundPlayer.DataContext = bm; } [code=csharp] using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace LotteryGo { public class BgMusic { public string BgMusicPath { get; set; } } }
在Load里写了开始播放的语句,播放的测试是正常的。但是,下面的Button过程就来问题了:无法暂停,这个按钮直接没反应了。
if (_isPlaying) { mySoundPlayer.Pause(); _isPlaying = false; } else { mySoundPlayer.Play(); _isPlaying = true; }
解决方案
20
你应该把触发器那一段去掉,在Loaded事件里面用代码开始播放,而不是用动画播放。
MediaElement 可以在两个不同的模式中使用,具体取决于驱动控件的模式是独立模式还是时钟模式。当在独立模式中使用时,MediaElement 与图像相似,并且可以直接指定 Source URI。在时钟模式中,MediaElement 可以看作是动画目标,因此它在计时树中具有相应的 Timeline 和 Clock 项。你是在时钟模式下播放的,因此播放完全是按照动画的Timeline 控制。
你应该在独立模式下播放,就是删掉动画那部分,将LoadedBehavior=”Manual”,这样就能手动控制播放、暂停和停止了。
MediaElement 可以在两个不同的模式中使用,具体取决于驱动控件的模式是独立模式还是时钟模式。当在独立模式中使用时,MediaElement 与图像相似,并且可以直接指定 Source URI。在时钟模式中,MediaElement 可以看作是动画目标,因此它在计时树中具有相应的 Timeline 和 Clock 项。你是在时钟模式下播放的,因此播放完全是按照动画的Timeline 控制。
你应该在独立模式下播放,就是删掉动画那部分,将LoadedBehavior=”Manual”,这样就能手动控制播放、暂停和停止了。
20
<MediaElement x:Name=”mySoundPlayer” DataContext=”{Binding}” LoadedBehavior=”Manual” UnloadedBehavior=”Pause” Source=”{Binding BgMusicPath}” Loaded=”MediaElement_Loaded”>