2011-04-05 54 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

相關問題