2017-09-07 150 views
2

在我的WPF中,每當用戶單擊右鍵時,都希望屏幕上的圖像發生更改。問題是,我一直有相同的錯誤信息:無法獲取Uri的文件路徑

'URI無效:無法確定URI的格式。'

這是代碼:

string pic1 = @"C:/Users/Milk/Desktop/exercises/wpf_1/portraits/1.png"; 
string pic2 = @"C:/Users/Milk/Desktop/exercises/wpf_1/portraits/2.png"; 

private void buttonRight_Click(object sender, RoutedEventArgs e) 
{ 
    List<string> portraits = new List<string>(); 
    portraits.Add(pic1); 
    portraits.Add(pic2); 
    string ShowPicture = portraits[counter % portraits.Count]; 
    image.Source = new BitmapImage(new Uri(portraits.ToString())); 
    counter++; 
} 

當我試圖只是一個字符串,像這樣:

image.Source = new BitmapImage(new Uri(pic1)); 

它工作正常,但一旦它在列表中,就不能找到文件路徑 - 至少,這對我來說是這樣的。

任何想法如何解決這個問題,我在哪裏做出錯誤?

回答

1

這是因爲.ToString()通常返回一個對象的名稱空間(除非重寫),在這種情況下是List的名稱空間;您需要將實際列表值逐個傳遞給構造函數Uri

你需要做的是在實際路徑傳遞這樣:

string ShowPicture = portraits[counter % portraits.Count]; 
image.Source = new BitmapImage(new Uri(ShowPicture)); 
+0

ShowPicture沒有他想要顯示圖片的路徑,但你的答案是正確的,他是招投標的對象列表,正如你所說的使用toString()會返回類似於A929D9933929919 - >對象引用 – napi15

+0

非常感謝你@Karolis,它的工作原理! :) – milk

0

嗨,你是它對象而不是元素鏈接到列表中的列表

這應該解決您的問題裏面:

image.Source = new BitmapImage(new Uri(portraits[0].ToString())); 

,將得到PIC1

,如果你想獲得pic2

你需要寫:

image.Source = new BitmapImage(new Uri(portraits[1].ToString())); 

,如果你想同時獲得事先知情同意的,你需要添加一個循環

喜歡的東西:

for (int i=0 ; i < portraits.count ; i++) 
image.Source = new BitmapImage(new Uri(portraits[i].ToString())); 
//..Do the rest 

肖像畫,讓我確切地知道您預期的結果,我將進一步細節