Sas*_*nge 8 wpf xaml uri relative-path .net-assembly
例如,我有以下项目结构:
Root\Core\Application.exe
Root\Modules\Assembly.dll
Root\Modules\Icons\Icon.png
Run Code Online (Sandbox Code Playgroud)
我的Application.exe加载Assembly.dll.Assembly.dll包含带有Image控件的WPF UserControl.Icon.png不是嵌入式资源,它是本地文件(Build:Content).
我尝试了Image Control的Source-Property中的每个可能的URI,但它从不显示图像:-(
<Image Source="Icons\Icon.png" />
<Image Source="pack://application:,,,/Icons\Icon.png" />
<Image Source="pack://application:,,,/Assembly;component/Icons/Icon.png" />
Run Code Online (Sandbox Code Playgroud)
等等
URI如何看起来像?
此声明暗示您无法引用程序集中的内容文件...(因此,只能使用"application://"解析应用程序中指定的内容文件).
http://msdn.microsoft.com/en-us/library/aa970069(v=vs.85).aspx
不包括引用程序集中的内容文件,因为它们不受WPF支持.引用程序集中嵌入文件的包URI是唯一的,因为它们包括引用程序集的名称和;组件后缀.原始站点文件的包URI是唯一的,因为它们使用的是唯一使用siteoforigin:///权限的包URI.
您可能会在某处使用"siteoforigin",它指的是运行.exe的位置.
Source="pack://siteoforigin:,,,/../Modules/Icons/Icon.png"
Run Code Online (Sandbox Code Playgroud)
要么
Source="pack://siteoforigin:,,,/Icons/Icon.png"
Run Code Online (Sandbox Code Playgroud)
虽然它可能不支持相对路径.
这也是一个镜头:
Source="../Modules/Icons/Icon.png"
Run Code Online (Sandbox Code Playgroud)
还有这个:
Source="Icons/Icon.png"
Run Code Online (Sandbox Code Playgroud)
在尝试使用Pack URI时,一个提示就是使用它来构建它们PackUriHelper,以便符合正确的语法/语义.
查看一些相关帖子:
另一个想法......
您可以定义自己的MarkupExtension,它有助于构建png文件的绝对路径.
您将拥有一个全局配置设置,该设置在使用LoadFrom加载DLL之前设置.
然后你会让你的XAML使用扩展名:
Source={local:MyMarkupExtensionPathBuilder Icon.png}
Run Code Online (Sandbox Code Playgroud)
使用这个作为起点...在你的情况下,你不想使用"application://"虽然...你想建立Uri作为一个直的绝对"文件"路径类型URI,例如"C:\ Program Files\myapplication\Root\Modules\Icons\icon.png".
您可以让MarkupExtension直接返回BitmapSource(或者只是让它返回一个字符串......然后TypeConverter会解析为BitmapSource).
(您也可以使用Binding来执行类似的操作,使用转换器连接路径的两个部分,或者如果您使用一个部分,则使ViewModel执行连接...尽管markupextension是一种更简洁的方法)
| 归档时间: |
|
| 查看次数: |
15704 次 |
| 最近记录: |