如何从XAML加载复合应用程序的图像?

时间:2011-04-05 20:08:04

标签: wpf silverlight xaml prism

我已经看过如何在Silverlight中加载图像以及如何在WPF中加载图像,但我无法弄清楚如何使用相同的XAML为复合Prism应用程序的Silverlight和WPF加载图像。理想情况下,我想做类似的事情:

<Image Source="/Resources/Images/foo.png"/>

使用组件表示法的相对URI将不起作用,因为Silverlight和WPF程序集的命名方式不同(故意为了理智)。我正在使用Silverlight 4和.NET 4.0。

3 个答案:

答案 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的解决方案有点干净,但自定义标记扩展可能会给你更大的灵活性,而且创建它们很简单