2012-03-14 9 views
2

私のアプリケーションでは、1ページに1つの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); 
} 

私はMediaElementのためMediaOpened lsitener登録している:

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

しかし、音が他のすべてのページにのみ再生されています。
Page1(サウンド) - > Page2(サウンドなし) - > Page3(サウンド) - > Page4(サウンドではない)のように見えます。
私はすべてを試しましたが、そのような動作を引き起こす原因を特定できません。たぶん重要ではないかもしれませんが、私は同じPhoneApplicationPageサブクラスのインスタンスをナビゲートしています。
アイデアはありますか?
P

+0

例外があるかどうかを確認するために 'MediaFailed'イベントを処理しようとしましたか?サウンドが再生されていないページで開かれたイベントが呼び出されていますか? –

+0

良い点。 Media Failedを試します。開いているイベントは、サウンドが再生されていないページで呼び出されていません。 –

+0

はすべてのページで再生される同じ音ですか?そのサウンドは次のページに移動する前に再生を終了しますか?ページから移動するときに現在の再生音を止めますか? –

答えて

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」を作成し、各ページに新しいインスタンスを作成するのではなく、各ページで再生される内容を更新することができます。 –

関連する問題