C# WPF包URI中的逗号

C# WPF包URI中的逗号,c#,wpf,C#,Wpf,使用三个连续的逗号,例如: pack://application:,,,/myFolder/myPic.bmp ,,部分应该有什么意义吗?它只是一个分隔符吗?逗号之间能有什么吗?答案在您链接的页面上 权限:应用程序:// 及 。。。此外,必须将“/”字符替换为“、”字符,并且必须转义保留字符,如“%”和“?”。有关详细信息,请参见OPC 所以 ,,部分应该有什么意义吗 它是// 逗号之间能有什么区别吗 不 更正:OPC(开放式包装)链接指向并包含以下示例 pack://http%3c,

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

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

,,
部分应该有什么意义吗?它只是一个分隔符吗?逗号之间能有什么吗?

答案在您链接的页面上

  • 权限:
    应用程序://

。。。此外,必须将“/”字符替换为“、”字符,并且必须转义保留字符,如“%”和“?”。有关详细信息,请参见OPC

所以

,,
部分应该有什么意义吗

它是
//

逗号之间能有什么区别吗

更正:OPC(开放式包装)链接指向并包含以下示例
pack://http%3c,www.openxmlformats.org,my.container/a/b/foo.xml

但这并不适用于WPF

背景 URI是一个方案权限路径1。
例如,以该网页的
http
URL为例:

https://stackoverflow.com/questions/16256056/commas-in-wpf-pack-uris
scheme=https://
authority=stackoverflow.com
path=/questions/16256056/wpf包URI中的逗号
pack
uri 这同样适用于您的
pack
URI:

pack://application:,,,/myFolder/myPic.bmp
方案=包装://
权限=应用程序:,,,
路径=/myFolder/myPic.bmp
这里不寻常的是,权限部分由另一个URI的编码表示组成。另一个URI如下所示:

应用程序:///
方案=应用程序://
授权=
路径=/
它指的是一个“包”——特别是指当前应用程序的资源文件包。从您已链接的目录:

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

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


包URI的授权组件是指向包的嵌入式URI,必须符合RFC 2396。此外,必须将“/”字符替换为“、”字符,并且必须转义保留字符,如“%”和“?”。有关详细信息,请参见OPC



1) 可能还有一个查询和片段,但它们在这里并不相关。

我只是访问了链接页面:它没有提到用逗号替换“//”。它显示了“application://”,然后紧接着给出了用逗号替换斜杠的示例,但它甚至没有提到替换或解释替换斜杠的原因。看它是令人困惑的,整个语法是一个怪物。我不知道他们希望任何人如何使用它。它解决了一个更大的问题,我想他们的期望是为WPF提供更多的工具。这从来没有发生过。如果你能提到(如果你知道的话)为什么有明显的需要(是吗?)用、、、来取代//,也许你的答案会更有用。我不得不承认,最近我自己也遇到了这个问题,这一切看起来更像是一堆魔法咒语,而不是其他任何东西。@Kris:我知道已经很晚了,但我补充了一个更深入的答案,这是如何过度设计和过度复杂化一些事实上应该很简单的事情的一个缩影,即“我想定位一个嵌入式或本地资源文件”。这只是WPF是如此令人痛苦的神秘框架的另一个原因。doc页面似乎根本没有解释嵌入URL的必要性。我们可以使用其他嵌入式权限,为什么我们需要这样做?事实上,这只是一个糟糕的设计选择,但它是微软的,所以毫不奇怪。