2013-02-11 1 views
0

Я использую следующий код для воспроизведения звука при нажатии кнопки.Как перейти к новой странице в приложениях с окнами 8 после того, как звук закончен?

public class AudioHelper 
    { 
     public async static void playButtonClick() 
     { 
      MediaElement snd = new MediaElement(); 
      StorageFolder folder = await Package.Current.InstalledLocation.GetFolderAsync("Audios"); 
      StorageFile file = await folder.GetFileAsync("buttonClick.m4a"); 
      var stream = await file.OpenAsync(FileAccessMode.Read); 
      snd.SetSource(stream, file.ContentType); 
      snd.Play(); 
     } 
    } 

Я назвал код из события нажатия кнопки, используя следующие коды:

private void btnFlashCard_Click(object sender, RoutedEventArgs e) 
     { 
      AudioHelper.playButtonClick(); 
      this.Frame.Navigate(typeof(LevelSelection)); 
     } 

поскольку playButtonClick является асинхронным, страница перейдите на страницу LevelSelection до аудио запуска игры. Как сделать так, чтобы сначала воспроизводиться аудио, а затем страница? Спасибо.

EDIT: Благодаря @htcdmrl мне удалось выяснить, как это сделать. Как я упоминал в комментарии, чтобы событие MediaEnded запускалось, MediaElement должен находиться в визуальном дереве. Я добавил следующий код в xaml и немного изменил код, чтобы заставить его работать.

Я добавил следующий код XAML:

<Frame HorizontalAlignment="Left" Margin="10,742,0,0" VerticalAlignment="Top"> 
      <MediaElement x:Name="me" HorizontalAlignment="Left" Height="100" Margin="20,742,0,-74" VerticalAlignment="Top" Width="100" RenderTransformOrigin="0.359,-0.219"/> 
     </Frame> 

Добавлено следующие коды MainPage.xaml.cs

public MainPage() 
     { 
      this.InitializeComponent(); 
      me.MediaEnded += me_MediaEnded; 
     } 

     void me_MediaEnded(object sender, RoutedEventArgs e) 
     { 
      this.Frame.Navigate(typeof(LevelSelection)); 
     } 

и изменить playButtonclick и btnFlashCard_Click на следующее:

private void btnFlashCard_Click(object sender, RoutedEventArgs e) 
     { 
      playButtonClick(); 
     } 

     public async void playButtonClick() 
     { 


      StorageFolder folder = await Package.Current.InstalledLocation.GetFolderAsync("Audios"); 
      StorageFile file = await folder.GetFileAsync("buttonClick.m4a"); 
      var stream = await file.OpenAsync(FileAccessMode.Read); 
      me.SetSource(stream, file.ContentType); 

      me.Play(); 
     } 

ответ

2

Добавить мероприятие, закончившееся средствами массовой информации, к вашему элементу мультимедиа;

MediaElement snd = new MediaElement(); 
snd.MediaEnded += snd_MediaEnded; 

Тогда добавьте свое событие;

void snd_MediaEnded(object sender, RoutedEventArgs e) 
{ 
    snd.Stop(); 
    this.Frame.Navigate(typeof(LevelSelection)); 
} 
+0

Я добавил событие MediaEnded, как вы показали выше, но событие MediaEnded никогда не запускалось. Есть идеи? – atbebtg

+1

Я выясняю, что случилось. Как оказалось, для того, чтобы событие срабатывало, MediaEnded должен находиться в визуальном дереве. Для того, чтобы я мог это сделать, мне нужно добавить фрейм с медиаэлементом в нем в xaml. – atbebtg

1

Использование события MediaElement.MediaEnded Событие:

private void btnFlashCard_MediaEnded(object sender, EventArgs e) 
{ 
    this.Frame.Navigate(typeof(LevelSelection)); 
}