Way*_*oss 6 .net c# windows wpf
我的问题是:我读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)中创建了新的WPF/.NET 4.0项目进行测试.
Startup Project: TryUri
App.xaml
MainWindow.xaml
Custom Ctrl Project: TryUri.CCL
Icons/folder.png <-- Marked As Resource!
Views/TestUC.xaml
Run Code Online (Sandbox Code Playgroud)
在TestUC.xaml中:
<Canvas>
<Border>
<Image Source="/Icons/folder.png" Height="Auto" Width="Auto" />
</Border>
</Canvas>
Run Code Online (Sandbox Code Playgroud)
在MainWindow.xaml中:
// xmlns:uc="clr-namespace:TryUri.CCL.Views;assembly=TryUri.CCL"
<uc:TestUC />
Run Code Online (Sandbox Code Playgroud)
结果:图像没有显示!!
当我将路径更改为"../Icons/folder.png"时,它确实有效.
如果我将Icons/folder.png复制到TryUri.CCL/Views /文件夹中,那么"Icons/folder.png"就可以了.
但是,我永远无法像MSDN所述的方式那样使用"/Icons/folder.png"中的前导斜杠.
use*_*116 13
当作为一个单独的程序集运行时,你的相对包URI必须以../
或者没有前导反斜杠的原因是因为MSDN(强调我的)使用相对URI的方式:
绝对与相对包URI
...
但是,如果使用前导反斜杠,则相对包URI引用将被视为相对于应用程序的根.
因此,如果您希望图像保持相对于引用的程序集,只需省略前导斜杠或../
在子文件夹中使用if.
有关如何查看运行时的示例,请参见下图:
答案是:相对路径中的前导斜杠始终解析为主程序集,而不是标记所在的程序集.
为了使其以MSDN状态的方式工作,我必须将所有图标存储在主程序集中的"Icons /"文件夹中,而不是存储在自定义控件dll中.
如果您选择将dll程序集中的资源存储在"Icons /"文件夹中,则必须使用相对于您正在处理的标记的路径(即" ../Icons/folder.png
")来引用它们,或者您必须使用程序集名称限定路径(即" /AssemblyName;component/Icons/folder.png
")