2012-02-23 42 views
22

我有幾個圖像,我想嵌入到EXE中。如何從XAML引用嵌入式資源?

當我生成操作設置爲嵌入的資源 我打通了代碼中的錯誤,該資源不可用,要我生成操作設置爲資源

我嘗試了幾種不同的方法:

<ImageSource x:Key="Image_Background">YearBook;component/Resources/Images/darkaurora.png</ImageSource> 

<ImageSource x:Key="Image_Background">Images/darkaurora.png</ImageSource> 

<ImageSource x:Key="Image_Background">pack://application:,,,/Resources/Images/darkaurora.png</ImageSource> 

此代碼坐落在一個資源文件。 但沒有工作,他們都拋出這個錯誤:

Cannot convert the string 'pack://application:,,,/Resources/Images/darkaurora.png' into a 'System.Windows.Media.ImageSource' object. Cannot locate resource 'resources/images/darkaurora.png'. Error at object 'Image_Background' in markup file 'YearBook;component/Resources/ImageResources.xaml' Line 4 Position 6. 

,並在代碼不同的地方,我得到:

the file 'YearBook;component/Resources/Images/shadowdrop.png' is not a part of the project or its 'Build Action' property is not set to 'Resource' 

那麼,什麼是我做錯了什麼?

回答

17

當您設置BuildAction的資源不言而喻,用於組件嵌入的資源。 或者你可以設置BuildAction的內容然後它會捆綁到生成的.xap文件。 您可以使用這些BuildActions中的任何一個。通過設置BuildAction的內容你可以像訪問圖片: "/Resources/Images/darkaurora.png"(必須以斜槓開頭)。而當你使用BuildAction的資源,那麼你可以訪問圖像"YearBook;component/Resources/Images/darkaurora.png"(的AssemblyName;組件/ relativepath)。希望這會有所幫助。

+13

「嵌入式資源」和「資源」是不同的。如果您在Reflector或ILSpy中查看生成的程序集,則會看到它們以不同的方式包含在內。作者問如何用「嵌入式資源」而不是「資源」來做到這一點。 – BrainSlugs83 2013-11-01 23:19:23

+0

@ethicallogics但如果需要通過viewmodel綁定這個資源呢?有沒有其他的選擇,比綁定到字符串路徑? – 2015-08-21 10:17:24

+0

這可惜不適用於BuildAction =資源 – Nick 2015-12-01 16:05:21

2

設置構建動作資源,而不是嵌入的資源

+0

但我希望它是嵌入的資源。我需要部署應用程序,而不會看到圖像。 – 2012-02-23 19:19:23

+3

將其設置爲資源將嵌入到程序集 – devdigital 2012-02-23 19:27:22

+0

哈哈它不是我的... – 2012-02-23 19:45:05

0

ImageSource不能被實例化。

public abstract class ImageSource : Animatable, 
IFormattable 

有那麼一點點abstract在那裏會擰你的一天。 XAML中實際上是試圖實例ImageSource的實例,則該元素(你的開放的,在這種情況下)中指定的值標有屬性ContentPropertyAttribute(??)使用任何轉換器,它可以定位到字符串轉換爲一個對象(再次,??)。

我想你想BitmapSource

<BitmapImage 
    x:Key="Image_Background" 
    UriSource="/Images/darkaurora.png" /> 
+0

那麼爲什麼當我將其設置爲資源時它工作? – 2012-02-23 19:27:02

+0

@ eric.itzhak:[呃,真的?](http://i.stack.imgur.com/RrKXy.png) – Will 2012-02-23 19:31:24

+4

其實你錯了這個,你可以在XAML中聲明'ImageSources'就好了,因爲類有一個[類型轉換器](http://msdn.microsoft.com/en-us/library/cc645047.aspx)與其關聯(請參閱[文檔]中的屬性(http://msdn.microsoft.com/ EN-US /庫/ system.windows.media.imagesource.aspx))。無法告訴你哪裏有記錄,但我認爲你可以相信我。只是因爲缺少標籤的內部XML,纔會出現該錯誤。 – 2012-02-24 00:25:05