WPF项目中,作为系统嵌入引用程序集中资源,例如资源字典文件、字体库、图片等等,编译生成后,直接嵌入到应用程序集中,如果希望在xaml中使用又不希望资源嵌入,而是希望随时能够替换应用程序所在目录下的外部资源文件如何去处理?

使用Pack URI中的外部方式源站点 Pack URIpack://siteoforigin:,,,/XXXXXXXXX,详情请查看链接,案例如下:

xaml中:

1
2
3
4
5
<Border Margin="10">
<Border.Background>
<ImageBrush ImageSource="pack://siteoforigin:,,,/bg.png"></ImageBrush>
</Border.Background>
</Border>

文件路径,图片资源与应用程序同级:

bugthink-packpath

效果:

原图:

bugthink-packuri

替换后:

bugthink-packpath-new

bugthink-packuri-new

但是需要注意的是,此类资源的是为独占类型,也就是说,当前应用程序使用时,不能允许操作对应的资源,包括修改、重命名以及替换,如果需要考虑资源的重复使用,可考虑将文件资源通过附加属性进行处理,缓存一份数据流到内存中,处理数据流