2010-06-11 111 views
4

我對這個問題的動機實際上只是通過ImageSource的依賴屬性指定要在用戶控件中使用的圖像。我遇到了一些涉及管理,訪問和單元測試的痛點。wpf圖像資源和visual studio 2010資源編輯器

  • 資源編輯器是一個很好的工具來維護應用程序的圖像嗎?
  • 將位圖從編輯器轉換爲ImageSource的最佳方式是什麼?
  • 如何從編輯器中獲取資源文件名?
+0

通過使用資源編輯器來維護圖像意味着什麼? – 2010-06-11 23:24:30

+0

我的意思是將圖像添加到資源設計器,然後在需要時找到它們。或者,如果這是一個壞主意,那麼對於可能在多個程序集中具有圖像的非平凡應用程序,更好的方法是什麼。乾杯 – Berryl 2010-06-12 00:13:07

回答

10

不,資源編輯器不是一個好的工具。

在WPF應用程序中,最好的方法是將所有圖像放在「圖像」目錄中,並將每個圖像標記爲「資源」。然後你可以在Image控件和其他地方直接引用它們。

以下是具體步驟:

  • 作物和以其他方式使用您喜歡的位圖編輯程序(Paint.NET時,Photoshop等)
  • 其保存爲.png文件調整圖像(或.jpg或.gif如果你願意)
  • 在你的Visual Studio解決方案(或多個文件夾,但是你想組織它)內創建一個「Images」文件夾
  • 將圖像從硬盤拖到你的「Images」或右鍵單擊該項目,選擇新建 - >現有項目並選擇圖像)

現在你可以在XAML輕鬆引用您的圖片:

<Image Source="Images/MyImage.png" /> 

或者代碼:

var source = (BitmapSource)Application.LoadComponent(
       new Uri("Images/MyImage.png", UriKind.Relative)); 

您也可以參考圖像外部組件:

<Image Source="ReferencedAssembly;v1.0.0.1;component/Images/MyImage.png" /> 

在代碼中是:

var source = (BitmapSource)Application.LoadComponent(
       new Uri("ReferencedAssembly;v1.0.0.1;component/Images/MyImage.png", 
       UriKind.Relative)); 
+0

完美!兩個問題 - (1)構建行爲是「內容」而不是「資源」的實際優勢? (2)將代碼放在引用的程序集中,只需將'Application.LoadComponent(「ReferencedAssembly; v1.0.0.1; component/Images/MyImage.png」)作爲BitmapSource;'?你知道任何幫助代碼來獲得該語法(對不起,三個問題)?謝謝! – Berryl 2010-06-12 05:39:03

+0

它看起來像Application.LoadComponent需要一個Uri(不是字符串) – Berryl 2010-06-12 05:57:39

+0

謝謝。不知何故,我總是忘記了「新Uri(...,UriKind.Relative)」,直到編譯器指出我的方式錯誤。我已經糾正了答案。 – 2010-06-12 22:15:47