在我的 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。
在仪表板上,OnNavigateTo()
方法,我有这个代码,
MusicMediaElement.Source = new Uri(CurrentCountdownItem.MusicFile, UriKind.Relative);
MusicMediaElement.Play();
但是音乐无法播放,并且我收到错误代码 3100,该错误代码是从 beep_MediaOpened()
方法调用的,如果无法打开文件,该方法就会被调用。
我已将音乐文件标记为内容,Asset/Image
文件夹中的其他图像文件按照此逻辑运行良好。我搜索了很多 3100 错误并使用 Uri 访问音乐文件,但没有得到任何工作结果。任何有关从 Uri 绑定(bind) MediaElement
Source 属性的帮助都值得赞赏。
最佳答案
将您的 MusicItem Uri 更改为以下内容。
Uri MusicItem = new Uri("/Assets/Music/Sleep_Away.wma", UriKind.Relative);
编辑
您正在 OnNavigateTo()
事件中播放音频。如果您在 OnNavigateTo
和 beep_MediaOpened
事件处理程序中设置断点,您可以看到 beep_MediaOpened
事件在 MusicMediaElement.Play()< 之后触发
行已完成执行。所以问题就很明显了。当您尝试播放该文件时,您的 mp3 文件未打开。
因此,您可以在 OnNavigateTo
事件处理程序中设置 MusicMediaElement
的来源,然后在 beep_MediaOpened
事件处理程序中播放 mp3,如下所示。这将在媒体元素正确打开文件后播放文件。
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();
}
这应该可以解决您的问题。
关于c# - 媒体文件 wp8 无法使用 Uri 播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25915354/