微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Wpf绝对与相对包装URI

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

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

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

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

为什么MS不能使用.Net打开?

用Win32 API编写应用程序事件信息

比较墨迹序列化格式中的签名

Windows操作系统和内存pipe理 – 应用程序最小化时会发生什么?

由VB.Net WinForms ClickOnce安装创build的快捷方式没有目标选项卡

所以,我在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”中获得主要的正斜杠。

Service.1中的ServiceBase.RequestAdditionalTime()

使用.NET的Windows Shell集成

如何在C#中指定非精确path

C#.NET从Web应用程序的串行端口访问

调用Form.Show()时设置窗体的位置

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

绝对与相对包装URI

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

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

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

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐