我已经看过如何在Silverlight中加载图像以及如何在WPF中加载图像,但我无法弄清楚如何使用相同的XAML为复合Prism应用程序的Silverlight和WPF加载图像。理想情况下,我想做类似的事情:
<Image Source="/Resources/Images/foo.png"/>
使用组件表示法的相对URI将不起作用,因为Silverlight和WPF程序集的命名方式不同(故意为了理智)。我正在使用Silverlight 4和.NET 4.0。
答案 0 :(得分:3)
您可以执行以下操作。在单独的资源字典中定义图像的URI。然后WPF和Silverlight项目将定义将由shell项目引用的自己的字典。这是一个例子:
<BitmapImage x:Key="Foo">/Resources/Images/foo.png</BitmapImage>
-
<Image Source="{StaticResource Foo}"/>
答案 1 :(得分:2)
(转发自我的评论作为答案)
我们刚刚进行了相同的命名健全性检查,他们在Prism样本中的方式确实引起了共鸣:程序集具有相同的文件名,但Silverlight的csproj文件在末尾附加了.Silverlight。所以在解决方案资源管理器中,它的MyProject.Silverlight,但是汇编文件只是MyProject.dll。这为您提供了设计时的理智,但是相同的程序集名称。 (参见股票交易商RI样本的一个例子)
答案 2 :(得分:1)
我在想与帕夫洛相似的东西。自定义MarkupExtension怎么样?
像
这样的东西<Image Source="{PathResolver BasePath=/Resource/Images/foo.png}" />
其中基本路径是路径的某些相对部分,可用于根据目标环境(WPF或Silverlight)解析完整路径
我认为Pavlo的解决方案有点干净,但自定义标记扩展可能会给你更大的灵活性,而且创建它们很简单