【问题标题】:Using Uri for .wav files将 Uri 用于 .wav 文件
【发布时间】:2014-03-10 13:26:32
【问题描述】:

我需要在 wpf 项目中播放一些 .wav 文件。之前没有使用Uri 的经验,所以我被卡住了。我已将两个 .wav 放在我的资源文件中,我声明:

Uri uri2 = new Uri(@"pack://application:,,,/Resources/WindowsExclamation.wav", UriKind.Absolute);

Uri uri1 = new Uri(@"pack://application:,,,/Resources/WindowsCriticalStop.wav", UriKind.Absolute);
            var player = new MediaPlayer();

我在下面的点上放了一个断点:

player.Open(uri2);
player.Play();

运行代码时,出现 uri2 权限异常:

{"The generic authority 'application:,,,' is not a valid dns name."}

【问题讨论】:

标签: c# wpf audio uri


【解决方案1】:

在 WPF 中从 XAML 引用项目资源时,我发现通常使用这种格式最容易找到相关文件:

"/ReferencedAssembly;component/Subfolder/ResourceFile.type"

这也可以被 Uri 对象引用和使用:

Uri uri = new Uri("/ReferencedAssembly;component/Subfolder/ResourceFile.type", 
    UriKind.Relative);

您也可以将此值公开为string 属性,然后简单地将其数据绑定到MediaElement.Source 属性:

您可以从 MSDN 上的Pack URIs in WPF 页面了解更多信息。

【讨论】:

    【解决方案2】:

    您是否尝试过使用更简单的相对 Uri

    Uri uri2 = new Uri(@"../../Resources/WindowsExclamation.wav", UriKind.Relative);
    

    【讨论】:

    • 我试过了,我得到:{“相对 URI 不支持此操作。”}
    • 稍微更新了我的答案,路径应该相对于可执行文件的位置(我假设它是bin\debug 文件夹)。无法使用 pack uri,但相对 uri 对我有用(.NET 4.5,VS2012)。
    • 它适用于 Uri("WindowsExclamation.wav", UriKind.Relative)
    猜你喜欢
    • 2014-03-16
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    相关资源
    最近更新 更多