WPF包URI中的逗号

Gig*_*igi 11 c# wpf

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

pack://application:,,,/myFolder/myPic.bmp
Run Code Online (Sandbox Code Playgroud)

,,,部分应该是什么意思吗?它只是一个分界符吗?逗号之间可以有任何内容吗?

Hen*_*man 7

答案在您链接的页面上,

  • 权威: application:///

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

所以

,,,部分应该是什么意思吗?

它是替代品 ///

逗号之间可以有任何内容吗?

没有.

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

但afaik不适用于WPF.

  • 我刚访问了链接页面:http://msdn.microsoft.com/en-us/library/aa970069.aspx,它没有提到用逗号替换'///'的任何内容.它显示"application:///"然后立即给出显示用逗号替换斜线的示例,但它甚至没有提到替换或解释为什么它们被替换.要看它是令人困惑的,整个语法是一个怪物.我不知道他们希望有人如何使用它. (3认同)

sml*_*mls 7

背景

一个URI是由一个方案授权,和路径1。以这个网页
http网址为例:

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

scheme    = https://
authority = stackoverflow.com
path      = /questions/16256056/commas-in-wpf-pack-uris
Run Code Online (Sandbox Code Playgroud)

pack URI

这同样适用于您的packURI:

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

scheme    = pack://
authority = application:,,,
path      = /myFolder/myPic.bmp
Run Code Online (Sandbox Code Playgroud)

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

application:///

scheme    = application://
authority = 
path      = /
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


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

  • 这是如何过度设计和过度复杂化实际上应该很简单的事情的缩影,即“我想找到嵌入式或本地资源文件”。这也是 WPF 成为一个令人痛苦的神秘框架的另一个原因。文档页面似乎根本没有解释嵌入 URL 的必要性。我们可以使用其他嵌入式权限吗?为什么我们需要这样做?实际上,总体而言这是一个糟糕的设计选择,但它是微软的,所以并不奇怪。 (3认同)