2012-03-14 46 views
2

在我的应用程序中,每页有一个MediaElement。当导航到这个页面时,我播放一条语音信息。WindowsPhone MediaElement

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
{ 
     base.OnNavigatedTo(e); 
     mediaElement.Stop(); 
     smediaElement.Source = new Uri("res/sounds/" + soundName, UriKind.RelativeOrAbsolute); 
} 

我已经注册lsitener MediaOpened为的MediaElement:

private void me_MediaOpened(object sender, RoutedEventArgs e) 
{ 
     MediaElement m = (MediaElement)sender; 
     m.Play(); 
} 

但声音只打在每隔页。
所以它看起来像:Page1(声音) - > Page2(没有声音) - > Page3(声音) - > Page4(没有声音)。
我尝试了一切,我无法确定可能导致此类行为的原因。也许这并不重要,但我正在浏览同一个PhoneApplicationPage子类的实例。
有什么建议吗?
P

+0

您是否尝试过处理'MediaFailed'事件以查看是否有异常?在没有播放声音的页面上打开的事件是否被调用? – 2012-03-14 19:45:15

+0

好点。我会尝试媒体失败。在没有播放声音的页面上未打开打开的事件。 – 2012-03-15 06:40:22

+0

这是每个页面播放的声音吗?在导航到下一页之前,这个声音是否完成了播放?浏览页面时是否停止当前的播放声音? – 2012-03-15 08:48:51

回答

1

我解决了这个问题,动态生成的MediaElement并从onNavigatedFrom 布局移除这里是代码:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
{ 
     base.OnNavigatedTo(e); 
     mediaElement = new MediaElement(); 
     slideSound.Volume = 1; 
     LayoutRoot.Children.Add(mediaElement); 
     .... 
} 

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) 
{ 
     base.OnNavigatedFrom(e); 
     mediaElement.Stop(); 
     LayoutRoot.Children.Remove(mediaElement); 
     mediaElement = null; 
} 

它完美。你必须删除mediaElement页面或下一页播放声音的操作非常不正确。

+0

作为一种替代方案,您可以在应用程序级别创建一个'MediaElement',让每个页面更新其中播放的内容,而不是在每个页面上创建新的实例。 – 2012-03-15 22:02:52