2012-03-14 43 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