我尝试使用图像文件进行此操作,就 uri 而言,它与声音文件的工作方式相同,因为它只是另一种资源。我使用了下面的代码,它基本上与你所拥有的相匹配。
new Uri(@"pack://application:,,,/Resources/logo.png")
确保您的“媒体”文件夹没有嵌套在任何其他文件夹中。如果是,您还需要包含该文件夹。
使用 .NET Framework 4.0、VS2012。
这个链接很好地描述了整个“包装”方案。
编辑
对此主题的更多研究似乎表明,您想要做的事情可能无法使用音频或视频文件。下面的摘录摘自此 MSDN 页面的备注部分。
尽管您可以在可扩展应用程序标记语言 (XAML) 中声明此类的实例,但您无法在不使用代码的情况下加载和播放其媒体。若要仅在 XAML 中播放媒体,请使用 MediaElement。此外,如果您在 XAML 中声明一个实例,则唯一的实际用途是为 Player 属性填充属性元素语法。
使用应用程序分发媒体时,不能将媒体文件用作项目资源。在您的项目文件中,您必须改为将媒体类型设置为 Content 并将 CopyToOutputDirectory 设置为 PreserveNewest 或 Always。
MediaPlayer 可以在两种不同的模式下使用,具体取决于驱动播放器的内容:独立模式或时钟模式。在独立模式下,MediaPlayer 类似于图像,通过 Open 方法打开的媒体驱动播放。在 Clock 模式下,MediaPlayer 可以被认为是动画的目标,因此它在控制播放的 Timing 树中有相应的 Timeline 和 Clock 条目。有关媒体模式的更多信息,请参阅多媒体概述。
MediaPlayer 与 MediaElement 的不同之处在于它不是可以直接添加到应用程序的用户界面 (UI) 的控件。要显示使用 MediaPlayer 加载的媒体,必须使用 VideoDrawing 或 DrawingContext。