此语句意味着您不能引用程序集中的内容文件...(因此只有在您的应用程序中指定的内容文件才能使用“application://”解析)。
http://msdn.microsoft.com/en-us/library/aa970069(v=vs.85).aspx
不包括引用程序集中的内容文件,因为它们不受 WPF 支持。引用程序集中的嵌入文件的包 URI 是唯一的,因为它们包括被引用程序集的名称和 ;component 后缀。源文件站点的包 URI 是唯一的,因为它们使用的是唯一使用 siteoforigin:/// 权限的包 URI。
您可能会在某个地方出现“siteoforigin”,它指的是您的 .exe 运行的位置。
Source="pack://siteoforigin:,,,/../Modules/Icons/Icon.png"
或者
Source="pack://siteoforigin:,,,/Icons/Icon.png"
虽然它可能不支持相对路径。
也试一试:
Source="../Modules/Icons/Icon.png"
和这个:
Source="Icons/Icon.png"
尝试使用 Pack URI 时的一个提示是使用 构建它们PackUriHelper
,以便您符合正确的语法/语义。
查看一些相关帖子:
另一个想法……
您可以定义自己的 MarkupExtension,它有助于为您的 png 文件构建绝对路径。
您将有一个全局配置设置,该设置在使用 LoadFrom 加载 DLL 之前设置。
然后你会让你的 XAML 使用扩展:
Source={local:MyMarkupExtensionPathBuilder Icon.png}
以此为起点...在您的情况下,您不想使用“application://”...您希望将 Uri 构建为直接的绝对“文件”路径类型 URI,例如“C:\程序文件\myapplication\Root\Modules\Icons\icon.png”。
你可以让你的 MarkupExtension 直接返回 BitmapSource (或者只是让它返回一个字符串......然后 TypeConverter 无论如何都会解析为 BitmapSource )。
(您也可以使用使用 Converter 连接路径的 2 个部分的 Binding 做类似的事情,或者如果您使用一个,则让您的 ViewModel 进行连接......尽管标记扩展是一种更简洁的方法)