2017-04-24 314 views
0

我在畫布上顯示圖像。當使用絕對路徑時,一切正常。但是,當我嘗試使用相對路徑時,我的代碼運行但圖像未加載。我需要使用相對路徑,因爲我們正在使用git處理組項目。包含我的圖像的文件夾位於項目文件夾內。爲什麼我的絕對路徑工作,但我的相對路徑不是?

private void ShuffleCardsClick(object sender, RoutedEventArgs e) 
    { 
     computerDeck.ShuffleDeck(); 
     playerDeck.ShuffleDeck();    
     dealButton.IsEnabled = true; 

     BitmapImage bi = new BitmapImage(); 
     bi.BeginInit();    
     bi.UriSource = new Uri(@"card_images\cardback.png", UriKind.RelativeOrAbsolute); 

     bi.UriSource = new Uri(@"C:\Users\Windows\Documents\GitHub\NetEssentials_H1\ 
     Kaartspelen\KoetjeMelken\card_images\cardback.png"); 
     bi.EndInit(); 

     Image card = new Image(); 
     card.Source = bi; 
     card.Margin = new Thickness(0, 0, 0, 0); 
     card.Width = computerDeckCanvas.Width; 
     card.Height = computerDeckCanvas.Height; 
     computerDeckCanvas.Children.Add(card); 

    } 
+0

那麼你的程序在'KoetjeMelken'中的可執行文件是? – NullDev

+0

這是正確的 – wetallday

回答

0

如果您正在使用MVC項目的工作,那麼你可以使用Server.MapPath("your/path")這將創造一個相對路徑爲您服務。

更多信息:MSDN

也爲類庫我曾經使用過的前下工作一種享受:

var appDomain = System.AppDomain.CurrentDomain; 
var basePath = appDomain.RelativeSearchPath ?? appDomain.BaseDirectory; 
var path = Path.Combine(basePath, "EmailTemplates"); 
+0

它不會簡單地生成我已經嘗試使用的相同路徑嗎? – wetallday

+0

它會,但它會產生一個相對於你的工作目錄的路徑。請注意,據我所知,這隻適用於MVC項目。 –

+0

請檢查我的更新答案。 –

2

在.NET客戶端應用程序的相對路徑總是相對於你的工作目錄。默認情況下,如果從Visual Studio中運行應用程序,則工作目錄爲bin \ Debug(或bin \ Release,如果以Release模式運行)。

因此,最快的修復方法是指定Visual Studio應將文件複製到目標文件夾。但是,如果用戶想要使用不同的工作目錄執行程序,這並不能解決您的問題。如果你想避免在這種情況下崩潰,你必須計算圖像文件的絕對路徑,例如以執行程序集的絕對路徑爲基礎。

否則,您還可以將圖片作爲資源加入。

+0

我認爲將他們添加爲資源是一種可行的方式。我只是覺得我的代碼沒有按照我擁有的方式工作真的很奇怪。 – wetallday

相關問題