2012-03-14 1 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, чтобы узнать, есть ли исключение? Открывается ли открытое событие на страницах, где звук не воспроизводится? –

+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» на уровне приложения и обновить каждую страницу, что там воспроизводится, а не создавать новый экземпляр на каждой странице. –