C#(WPF)按鈕圖片不顯示,桌布切換功能
最近開始做一個懶人桌面的專案,於是開始重頭學習C#,今天實現了桌面桌布的切換功能,程式碼很少,但是遇到了很多基礎的問題,我全部列在這裡,供小夥伴們檢視,少走彎路(我的環境是vs2013+wpf+.net4.0)。
1. 給按鈕添加了圖片,設計視圖裡能顯示,但是執行時就是看不到圖片顯示。
弄了半天才發現需要把資原始檔新增到工程裡,這裡我們直接拖入到工程裡的引用裡就行了。
如果還不行,你要試著重新生成解決方案
2.
為了程式的可移植性,我在程式裡使用了相對路徑,但是又出現了問題,切換桌布無效。又是想了半天,才肯定是路徑問題,這裡是因為xmal檔案和程式執行時,相對路徑的當前目錄改變了的原因。之前我為按鈕新增圖片時,相對路徑的當前目錄是工程當前所在目錄
所以我要使用resource資料夾裡的圖片,直接使用相對路徑"Resource\Icon\next.png"就行了,但是到了切換桌布的時候,因為這時程式開始運行了,所以此時的相對路徑的當前目錄改變到了debug目錄,這時再要使用Resource資料夾裡的檔案,就不能再直接使用"Resource\Icon\next.png",得先回到Resource資料夾所在的目錄在呼叫,所以這裡得這樣使用”..\\..\\Resource\\wallpaper.bmp“(這裡為什麼有兩個斜槓?理由是轉移字元,這裡也可以這樣寫@“..\..\Resource\wallpaper.bmp”,不懂自己google)
3. 如何進行桌布切換
呼叫windows的user32.dll,來實現桌布切換,但是這裡必須注意,這個api只支援bmp格式的圖片,所以,要想切換,得先把圖片格式通過程式改為bmp,主要程式如下
//取出將要替換的桌布 string wallpaper = "..\\..\\Resource\\Wallpaper\\" + allimg[current_img_num];//取出要切換的桌布路徑 //將指標指向下一張桌布,若是這個數字超過了列表的長度,說明桌布已經到達最後一張,這時將其置為1,重頭開始 if (current_img_num++ >=allimg.Count()-1) { current_img_num=1; } string tempFile = "..\\..\\Resource\\wallpaper.bmp";//因為桌布必須為bmp格式,所以設定一個bmp的暫存檔案 System.Drawing.Image image = System.Drawing.Image.FromFile(wallpaper); image.Save(tempFile, System.Drawing.Imaging.ImageFormat.Bmp);//將要切換的桌布 wallpaper = tempFile; SystemParametersInfo(20, 0, wallpaper, 0x2);//將桌布切換為Wallpaper
注意System.Drawing.Image這個類必須要引用System.Drawing這個名稱空間才行