在我的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
来源属性的帮助都表示赞赏。
答案 0 :(得分:2)
将您的MusicItem Uri更改为以下内容。
Uri MusicItem = new Uri("/Assets/Music/Sleep_Away.wma", UriKind.Relative);
修改强>
您正在OnNavigatedTo()
事件中播放音频。如果在OnNavigatedTo
和beep_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}}
这可以解决您的问题。