2016-02-05 85 views
0

我只是在學習c#,並一直在努力使用WPF中的URI。我已經搜索了一下,但沒有多少運氣。c#WPF URI語法

基本上我試圖將一個BitmapImage對象作爲一個屬性存儲在一個Car對象中。然後我想要在WPF窗體的Image控件中顯示BitmapImage。

的應用程序是一個簡單的應用程序(它是一個統一分配),所以沒有數據庫等

我有這樣的兩種方法。首先是我從文本文件中預加載汽車數據,包括我要加載的JPG的文件名。我將JPG包含在一個名爲Files的目錄中,該目錄不在我的源代碼和類文件所在的主目錄中。我已將JPG文件設置爲「內容」和「始終複製」。當我運行調試時,它將Files目錄和JPG複製到debug \ bin目錄。

我的代碼通過使用URI引用JPG來創建BitmapImage,如下所示;

BitmapImage myImage = new BitmapImage (new Uri("Files/" + Car.Imagefilename, UriKind.Relative); 
Car.Image = myImage; 
ImageControl.Source = myImage; 

如果我在調試器中逐句通過此代碼,它有時會工作並顯示圖像,但大多數情況下它不顯示圖像。

我的第二種方法是當用戶創建一個新的汽車。此方法始終有效。在這一個中,我使用文件對話框(dlg)來選擇圖像並使用絕對路徑。

BitmapImage myImage = new BitmapImage (new Uri(dlg.Filename, UriKind.Absolute); 
Car.Image = myImage; 
ImageControl.Source = myImage; 

所以....我不能解決爲什麼第一種方法不起作用。我認爲這與相關參考有關,但我無法弄清楚如何正確地使用語法。我嘗試過使用「pack:,,,」,我嘗試添加「component」,我在「pack」之前嘗試了一個'@'。我似乎無法找到簡單解釋這一點的東西。

道歉,如果這是直截了當,但它是我的頭!欣賞任何指針。

回答

1

首先嚐試使用其絕對路徑加載圖像文件。例如,如果圖像存儲在C:\項目\ yourproject \文件,然後嘗試使用像

BitmapImage myImage = new BitmapImage (new Uri("c:/projects/yourproject/files/carname.jpg", UriKind.Absolute); 

的東西,如果一切正常,你所面對的是一個路徑計算問題。

此時,您可以在運行時參考您的可執行文件使用AppDomain.CurrentDomain.BaseDirectory來計算Absolute,也可以使用App.Config來存儲路徑並從中引用它。

乾杯

+0

非常感謝!這工作。我得到它使用完整路徑,然後使用AppDomain.CurrentDomain.BaseDirectory。 我知道這很簡單! –

+0

尼克很好。但是現在你對文件夾結構有依賴性,這可能並不理想。考慮在App.Config上存儲圖像的路徑並從那裏加載它。這樣,如果用戶決定要將圖像移動到單獨的服務器上,則只需修改配置文件,系統將繼續工作。無論如何,我很高興它爲您工作 –

1

如果圖像文件位於您的Visual Studio項目的「文件」文件夾,你應該設置自己的Build ActionResource(和Copy to Output DirectoryDo not copy),並通過Resource File Pack URI加載它們:

var image = new BitmapImage(new Uri("pack://application:,,,/Files/" + Car.Imagefilename)); 
Car.Image = image; 
ImageControl.Source = image; 

沒有必要在任何地方複製文件。圖像直接從程序集中加載。