下載自:http://download.csdn.net/detail/xinzhe5468/5220351
WPF中Images控件路徑問題
在WPF當中,我們經常用到Image控件來展示圖片。Image控件通過Source屬性來控制要現實的圖片。
前台Xaml修改Source。通過前台Xaml代碼為Image指定Source屬性時可以是圖片的相對路徑也可以是圖片的絕對路徑。絕對路徑沒有問題,但是如果指定的時圖片的相對路徑,我們必須保證圖片已經包含在當前項目當中,並且圖片的屬性“生成操作”必須是Resource才可以在程序運行時正常顯示圖片,如果圖片僅僅是在項目中的文件夾下而沒有包含在項目當中,我們指定其為Image控件的Source屬性時在Visual Studio的Xaml頁面預覽當中可以看到圖片,但是在程序運行時圖片是不顯示的。需要主要的是但我們在Xaml代碼當紅直接修改Image的Source屬性時經常會有延遲或者類似緩存效應,有時修改了Image的 Source可能不會馬上看到效果。
后台C#修改Source。在實際的開發過程當中,我們經常需要通過后台的C#動態的為Image空間指定Source來顯示想要展示的圖片。我們在C#當中通常以Image_Test.Source=new BitmapImage(new Uri(“圖片路徑”,UriKind. RelativeOrAbsolute))的方式來為Image控件指定Source屬性。在C#當中為Image空間指定Source屬性時圖片路徑可以是相對路徑也可以絕對路徑。相對路徑要求比較嚴格,C#中指定Source時圖片的“生成操作”屬性必須是“Resource”,與在Xaml當中一樣。在需要固定的一些項目中的圖片切換時我們可以通過這種方式完成。絕對路徑是沒有問題的,不需要圖片文件包含在項目當中。直接在實例化Uri時指定圖片的絕對路徑就OK啦。絕對路徑書寫起來比較麻煩,我們不可能手寫圖片的絕對路徑,而且當我們的程序移動到了其他位置時手寫的絕對路徑就不再有效啦。此時,我們可以通過程序動態的讀取當前程序所在的絕對路徑,然后再結合圖片相對於程序的路徑最終獲得圖片的絕對路徑,這樣就解決了圖片絕對路徑的問題,當我們程序移動到其他位置時,我們依然可以動態獲取程序運行的圖片的相對路徑。System.IO.Path.GetFullPath()可以獲取相對於當前運行的可執行程序所在目錄的給定的相對路徑對應的絕對路徑。當前可執行程序目錄一般在 …/bin/Debug(Release)/
例如:要顯示在程序目錄下的Images/test/1.jpg
(1) 圖片包含在項目當中
①Xaml指定
<Image Name="img_test" Source="Images/test/1.jpg"></Image>
②C#指定
img_test.Source = new BitmapImage(new Uri("Images/test/1.jpg",UriKind.Relative));
(2) 圖片不包含在項目當中
string path = System.IO.Path.GetFullPath("../../Images/test/1.jpg");//從當前可執行程序目錄返回到項目根目錄在再取Images文件夾 程序目錄一般為 項目根目錄/bin/Debug/程序.exe
img_test.Source = new BitmapImage(new Uri(path,UriKind.Absolute));
