2017-09-07 206 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 

肖像画,让我确切地知道您预期的结果,我将进一步细节