0

次のコードを使用して、ボタンのクリックでサウンドを再生しています。

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();
        }
4

2 に答える 2

2

メディア要素にメディア終了イベントを追加します。

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

次に、イベントを追加します。

void snd_MediaEnded(object sender, RoutedEventArgs e)
{
    snd.Stop();
    this.Frame.Navigate(typeof(LevelSelection));
}
于 2013-02-11T08:00:05.020 に答える
1

イベント MediaElement.MediaEnded イベントを使用します。

private void btnFlashCard_MediaEnded(object sender, EventArgs e)
{
   this.Frame.Navigate(typeof(LevelSelection));
}
于 2013-02-11T06:20:21.353 に答える