声音播放完毕后,如何在windows 8 metro应用程序中导航到新页面

本文关键字:应用程序 metro 导航 新页面 windows 播放 声音 | 更新日期: 2023-09-27 17:58:33

我正在使用以下代码在单击按钮时播放声音。

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

声音播放完毕后,如何在windows 8 metro应用程序中导航到新页面

将媒体结束事件添加到您的媒体元素中;

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

然后添加您的活动;

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

使用事件MediaElement.MediaEnded事件:

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