Windows phone 7 WindowsPhone MediaElement

Windows phone 7 WindowsPhone MediaElement,windows-phone-7,audio,playback,mediaelement,Windows Phone 7,Audio,Playback,Mediaelement,在我的应用程序中,每页有一个MediaElement。当导航到此页面时,我播放语音消息 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedTo(e); mediaElement.Stop(); smediaElement.Source = new Uri("res/sounds/" + soundNam

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

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
      base.OnNavigatedTo(e);
      mediaElement.Stop();
      smediaElement.Source = new Uri("res/sounds/" + soundName, UriKind.RelativeOrAbsolute);
}
我已为MediaElement注册了lsitener MediaOpen:

private void me_MediaOpened(object sender, RoutedEventArgs e)
{
        MediaElement m = (MediaElement)sender;
        m.Play();
}
但是声音只会每隔一页播放一次。
所以它看起来像:Page1(声音)->Page2(没有声音)->Page3(声音)->Page4(没有声音)。
我什么都试过了,但我不知道是什么导致了这种行为。也许这并不重要,但我正在浏览同一PhoneApplicationPage子类的实例。
有什么想法吗?

P

我解决了在onNavigatedFrom中动态生成MediaElement并从布局中删除的问题 以下是代码:

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,否则下一页播放的声音将无法正常工作。

您是否尝试过处理
MediaFailed
事件以查看是否存在异常?在没有播放声音的页面上调用打开的事件了吗?很好。我将尝试媒体失败。未播放声音的页面上未调用Open event。每个页面播放的声音是否相同?在导航到下一页之前,声音是否播放完毕?当导航离开页面时,是否停止当前播放的声音?它不是相同的声音。我在navigateFrom方法中停止上一个声音。我检查并注册了侦听器onMediaFailed。触发此事件,错误消息为“3123发生错误”。或者,您可以在应用程序级别创建单个
MediaElement
,并让每个页面更新其中播放的内容,而不是在每个页面上创建新实例。