2011-04-05 47 views
1

我见过如何在Silverlight中加载图像以及如何在WPF中加载图像,但我无法弄清楚如何使用相同的XAML为复合Prism应用程序的Silverlight和WPF风格加载图像。理想情况下,我想这样做:如何从XAML中为复合应用程序加载图像?

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

使用的组件符号将无法工作,因为Silverlight和WPF组件名称不同(有目的的,对于理智)的相对URI。我正在使用Silverlight 4和.NET 4.0。

+2

也许只是一个微不足道的话题,但我们只是经历了相同的命名完整性检查,他们在棱镜样本中做的方式真的引起了共鸣:程序集相同的文件名,但silverlight的csproj文件将.Silverlight追加到最后。因此,在解决方案资源管理器中,它的MyProject.Silverlight,但程序集文件只是MyProject.dll。这给了你设计时的完整性,但同样的组合名称。 (以股票交易者RI样本为例) – JMarsch 2011-04-05 21:59:30

+0

@JMarsch:我认为这是一个答案? – 2011-04-06 11:18:40

+0

@Anderson Imes - 我会重新发布,所以你可以标记答案! – JMarsch 2011-04-06 13:54:34

回答

3

您可以执行以下操作。在单独的资源字典中定义图像的URI。然后,WPF和Silverlight项目将定义将由shell项目引用的自己的字典。这里有一个例子:

<BitmapImage x:Key="Foo">/Resources/Images/foo.png</BitmapImage> 

-

<Image Source="{StaticResource Foo}"/> 
+0

有没有完美的解决方案,但这似乎平衡工具支持(见我的其他评论)和解决问题。谢谢! – 2011-04-06 18:08:49

1

我想类似的东西帕夫洛。如何定制MarkupExtension?

喜欢的东西

<Image Source="{PathResolver BasePath=/Resource/Images/foo.png}" /> 

其中基本路径是,你可以使用基于目标环境(WPF或Silverlight)来解决一个完整路径的路径的一些相对部分

帕夫洛的解决方案是一个少许清洁剂,我认为,但自定义标记扩展可能会给你更多的灵活性,他们是微不足道的创建

+0

这对于Silverlight 4及以下版本无效,自定义MarkupExtensions计划在v5中首次亮相。 – dain 2011-04-06 14:04:26

+0

啊,好的电话,我最近没有和Silverlight一起工作,忘记了它没有自定义标记扩展。很高兴知道它即将推出 – 2011-04-06 16:45:06

2

(从我的评论转贴作为一个答案)

我们刚刚经历了相同的命名完整性检查,并且他们在Prism示例中执行此操作的方式确实触动了一个共鸣:程序集具有相同的文件名,但silverlight的csproj文件将.Silverlight附加到末尾。因此,在解决方案资源管理器中,它的MyProject.Silverlight,但程序集文件只是MyProject.dll。这给了你设计时的完整性,但同样的组合名称。 (例如,参见股票交易者RI样本)

+0

我真的很想使用这个解决方案,但是当您使用ReSharper这样的工具时它会崩溃:如果您在XAML中添加未引用类型并使用RS添加引用,那么这太容易了选择错误的程序集(SL当你想要WPF,反之亦然)。我认为在支持工具变得更好之前,保留这些名字是很重要的。 – 2011-04-06 18:07:38

+0

啊 - 我没有使用resharper,也没有考虑XAML角度。我猜从那里开始,他们是通过程序集名称而不是项目名称来完成的? – JMarsch 2011-04-06 19:24:23

+0

是的,他们按照程序集名称而不是项目名称。我今天晚些时候会提交一个bug,它们允许你从一个Silverlight项目中引用一个WPF程序集。它应该足够聪明,以了解IMO的差异。 – 2011-04-07 16:31:42

相关问题