次のコードを使用して、ボタンのクリックでサウンドを再生しています。
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 ページに移動します。オーディオが最初に再生され、次にページがナビゲートされるようにするにはどうすればよいですか? ありがとうございました。
編集: @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();
}