2011-04-05 45 views
61

我對WPF很新穎。我把一個Image控件放在一個Window上,我想將控件上的圖像設置爲一個存儲在名爲「Resources.resx」的項目資源文件中的圖像。資源文件中圖像的名稱是「搜索」。有人能告訴我如何去做這件事嗎?如何在XAML中引用圖像資源?

回答

91

如果圖像是在你的資源文件夾及其構建操作設置爲資源。您可以按如下方式在XAML中引用圖像:

"pack://application:,,,/Resources/Search.png" 

假設您在Resources文件夾下沒有任何文件夾結構,並且它是應用程序。例如我使用:

ImageSource="pack://application:,,,/Resources/RibbonImages/CloseButton.png" 

當我有一個名爲RibbonImages資源文件夾下的文件夾。

+0

'pack'命名空間代表什麼? – Hosea146 2011-04-05 17:45:08

+2

這裏是關於包URI信息:http://msdn.microsoft.com/en-us/library/aa970069(v=VS.90).aspx#The_Pack_URI_Scheme – Viv 2011-04-05 17:48:29

+2

它以來我添加圖片到我的應用程序,而..我會在這裏撥錯,但我認爲你可能需要構建應用程序它顯示在WPF設計器中的圖像之前。 – Viv 2011-04-05 17:51:25

-2

已經討論過,好像有個例子給你here

您還可以看看here,在這裏你可以對什麼是可能有更深的瞭解。

+3

謝謝,但沒有我在那篇文章中所看到的幫我做我想做的事情。 – Hosea146 2011-04-05 14:53:33

22

如果你已經在你的項目的圖標文件夾中有一個形象和它的生成操作是「資源」,你可以參考這樣的:

<Image Source="/Icons/play_small.png" /> 

這是做到這一點的最簡單方法。這是我能想出這樣做純粹是從資源的角度來看的唯一途徑,沒有項目文件:

var resourceManager = new ResourceManager(typeof (Resources)); 
var bitmap = resourceManager.GetObject("Search") as System.Drawing.Bitmap; 

var memoryStream = new MemoryStream(); 
bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Bmp); 
memoryStream.Position = 0; 

var bitmapImage = new BitmapImage(); 
bitmapImage.BeginInit(); 
bitmapImage.StreamSource = memoryStream; 
bitmapImage.EndInit(); 

this.image1.Source = bitmapImage; 
+15

在燈架上有一個輕微的變化:'<圖像源=「/圖標/ play_small.png」 />'注意在這意味着看在根文件夾起始的斜線。如果XAML文件不在根,這是必要的,因爲沒有斜槓,它將開始在同一目錄中的XAML文件搜索。 – 2013-08-12 18:55:59

+0

謝謝,更新的答案。 – RandomEngy 2016-06-20 04:40:11

7

使用一個資源文件的好處是通過名稱訪問資源,因此圖像會發生變化,圖像名稱可以改變,只要資源被不斷更新正確的圖像會顯示出來。

這裏是實現這個清潔方法: 假設Resources.resx是「UI.Images」命名空間,在您的XAML添加命名空間引用這樣的:

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:UI="clr-namespace:UI.Images" 

設置你的圖片來源是這樣:

<Image Source={Binding {x:Static UI:Resources.Search}} />其中'搜索'是資源的名稱。

2
  1. 將文件夾添加到您的項目,並通過「現有項目」添加圖像。
  2. XAML與此類似:<Image Source="MyRessourceDir\images\addButton.png"/>
  3. F6(生成)