Я использую следующий код для воспроизведения звука при нажатии кнопки.Как перейти к новой странице в приложениях с окнами 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();
}
Я добавил событие MediaEnded, как вы показали выше, но событие MediaEnded никогда не запускалось. Есть идеи? – atbebtg
Я выясняю, что случилось. Как оказалось, для того, чтобы событие срабатывало, MediaEnded должен находиться в визуальном дереве. Для того, чтобы я мог это сделать, мне нужно добавить фрейм с медиаэлементом в нем в xaml. – atbebtg