【发布时间】:2013-02-11 06:13:12
【问题描述】:
我正在使用以下代码在按钮单击时播放声音。
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();
}
【问题讨论】:
标签: c# windows-8 navigation mediaelement