Wpf绝对与相对包装URI

我的问题是:我读MSDN错误或是MSDN错误? 我正在尝试通过相对URI引用图像资源

标题为“ WPF中的包URI ”的MSDN页面明确指出:

“本地程序 集子 文件夹中的资源文件”= “/ Subfolder/ResourceFile.xaml

在表2中:标记中的相对URI(这里http://msdn.microsoft.com/en-gb/library/aa970069.aspx )。

所以,我在Vs2010(v10.0.40219.1 SP1Rel)中创build了新的WPF / .NET 4.0项目来testing。

Startup Project: TryUri App.xaml MainWindow.xaml Custom Ctrl Project: TryUri.CCL Icons/folder.png <-- Marked As Resource! Views/TestUC.xaml 

在TestUC.xaml中:

 <Canvas> <Border> <Image Source="/Icons/folder.png" Height="Auto" Width="Auto" /> </Border> </Canvas> 

在MainWindow.xaml中:

 // xmlns:uc="clr-namespace:TryUri.CCL.Views;assembly=TryUri.CCL" <uc:TestUC /> 

结果: 图像不显示!

当我将path更改为“../Icons/folder.png”时, 它确实有效。

如果我把图标/ folder.png复制到TryUri.CCL / Views /文件夹,那么“Icons / folder.png”就起作用了。

但是,我无法像MSDN所说的那样在“/Icons/folder.png”中获得主要的正斜杠。

Solutions Collecting From Web of "Wpf绝对与相对包装URI"

原因是,作为一个单独的程序集运行时,您的Relative Pack URI必须以../开头,否则没有前导的反斜杠,这是因为从MSDN(重点是我的) ,如何使用相对URI。

绝对与相对包装URI

然而,如果使用前导反斜杠 ,则相对包URI参考被认为是相对于应用程序的根

因此,如果您希望图像保持相对于您引用的程序集,则只需省略前导斜杠或在子文件夹中使用../

请参阅下面的图像以查看运行时的示例:

绝对与相对包装URI

答案是这样的: 相对路径中的前导斜杠总是解析为主程序集,而不是标记所在的程序集。

为了使其工作方式,MSDN说,我将不得不将所有图标存储在主程序集中的“图标/”文件夹,而不是在自定义控件的DLL。

如果您选择将资源存储在“图标/”文件夹中的dll程序集中,则必须使用与正在使用的标记相关的路径(即“ ../Icons/folder.png ”)引用它们, ../Icons/folder.png必须使用程序集名称限定路径(即“ /AssemblyName;component/Icons/folder.png ”)

只需将<ApplicationName>替换为应用程序的名称即可

 Source="/<ApplicationName>;component/Icons/folder.png"