Mediafile wp8无法使用Uri播放

时间:2014-09-18 14:24:11

标签: c# xaml windows-phone-8 mediaelement

在我的Windows Phone 8项目中,我在Dashboard.xaml上定义了MediaElement,如下所示,

<MediaElement x:Name="MusicMediaElement" Height="100" Width="100"                            
                VerticalAlignment="Bottom" Margin="176,100,204,69"                            
                Volume="1"
                Source="{Binding CurrentCountdownItem.MusicFile}"
                MediaFailed="beep_MediaFailed" 
                MediaOpened="beep_MediaOpened"
                AutoPlay="False"/>

当用户在NewItem.xaml页面上选择音乐文件时,我将值设置如下,

Uri MusicItem = new Uri("../Assets/Music/Sleep_Away.wma", UriKind.Relative);
MyNewItem.MusicFile = MusicItem.ToString();

使用viewModel将MyNewItem值正确复制到CurrentCountdownItem。

在仪表板上,OnNavigatedTo()方法,我有这段代码,

MusicMediaElement.Source = new Uri(CurrentCountdownItem.MusicFile, UriKind.Relative);
MusicMediaElement.Play();

但是音乐没有播放,我得到了错误代码3100,从beep_MediaOpened()方法调用,如果它无法打开文件就会被调用。

我已将音乐文件标记为Asset/Image文件夹中的内容和其他图像文件按照此逻辑正常运行。我搜索了很多3100错误并使用Uri访问音乐文件,但没有得到任何工作结果。任何关于来自Uri的绑定MediaElement来源属性的帮助都表示赞赏。

1 个答案:

答案 0 :(得分:2)

将您的MusicItem Uri更改为以下内容。

Uri MusicItem = new Uri("/Assets/Music/Sleep_Away.wma", UriKind.Relative);

修改

您正在OnNavigatedTo()事件中播放音频。如果在OnNavigatedTobeep_MediaOpened事件处理程序中设置断点,则可以看到beep_MediaOpened行在MusicMediaElement.Play()行执行完毕后触发MusicMediaElement个事件。所以问题很明显。尝试播放文件时,未打开mp3文件。

因此,您可以在OnNavigatedTo事件处理程序中设置beep_MediaOpened的来源,然后在protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); MusicMediaElement.Source = new Uri(CurrentCountdownItem.MusicFile, UriKind.Relative); } private void beep_MediaOpened(object sender, RoutedEventArgs e) { MusicMediaElement.Play(); } 事件处理程序中播放mp3,如下所示。这将在媒体元素正确打开文件后播放文件。

{{1}}

这可以解决您的问题。