14

WPF 包 URI使用三个连续的逗号,例如:

pack://application:,,,/myFolder/myPic.bmp

,,,部分应该意味着什么吗?它只是一个分隔符吗?逗号之间可以有任何东西吗?

4

2 回答 2

8

背景

URIschemeauthoritypath 1组成
例如,获取http此网页的 URL:

https://stackoverflow.com/questions/16256056/commas-in-wpf-pack-uris

scheme    = https://
authority = stackoverflow.com
path      = /questions/16256056/commas-in-wpf-pack-uris

packURI

这同样适用于您的packURI:

pack://application:,,,/myFolder/myPic.bmp

scheme    = pack://
authority = application:,,,
path      = /myFolder/myPic.bmp

这里不寻常的是,权限部分由另一个 URI的编码表示组成。其他 URI 如下所示:

application:///

scheme    = application://
authority = 
path      = /

它指的是一个“包”——具体来说,是指当前应用程序的资源文件包。从您已经链接的文档页面:

WPF 支持两种权限:application:/// 和 siteoforigin:///。application:/// 权限标识在编译时已知的应用程序数据文件,包括资源和内容文件。siteoforigin:/// 权限标识原始文件的站点。

为了用作 URI 的授权组件pack,需要对其进行编码,以便其斜杠不会被误解为属于URI的路径组件。 他们选择对其进行编码的方式是用逗号替换斜杠。 从同一文档页面:pack

注意
包 URI 的授权组件是一个嵌入的 URI,它指向一个包,并且必须符合 RFC 2396。此外,“/”字符必须替换为“,”字符和保留字符,例如“%”和“?” 必须逃脱。有关详细信息,请参阅 OPC。


1)加上潜在的查询和片段,但这些在这里不相关。

于 2018-03-20T08:37:28.830 回答
7

答案在您链接到的页面上,

  • 权威:application:///

... 此外,“/”字符必须替换为“,”字符和保留字符,如“%”和“?” 必须逃脱。有关详细信息,请参阅 OPC

所以

,,,部分应该意味着什么吗?

这是一个替代品///

逗号之间可以有任何东西吗?

不。

更正:OPC(开放打包)链接指向ECMA-376,其中包含如下示例
pack://http%3c,,www.openxmlformats.org,my.container/a/b/foo.xml

但是afaik不适用于WPF。

于 2013-04-27T19:38:33.073 回答