2017-09-07 1 views
2

In meinem WPF möchte ich Bilder auf dem Bildschirm ändern, jedes Mal, wenn der Benutzer auf die rechte Maustaste klickt. Das Problem ist, dass ich immer die gleiche Fehlermeldung habe:Kann den Dateipfad für den Uri nicht abrufen

'Ungültige URI: Das Format der URI konnte nicht ermittelt werden.'

Dies ist der Code:

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++; 
} 

Wenn ich mit einer Saite gerade versucht, wie folgt aus:

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

es funktioniert gut, aber wenn es in der Liste enthalten ist, kann es nicht finde den Dateipfad - so sieht das zumindest für mich aus.

Irgendeine Idee, wie man das behebt und wo ich einen Fehler mache?

Antwort

1

Es ist, weil .ToString() in der Regel Namespace eines Objekts zurückgibt (außer überschrieben), in diesem Fall ist List Namespace; Sie müssen die tatsächlichen Listenwerte eins nach dem anderen in Uri Konstruktor übergeben.

Was müssen Sie tun, um als solcher in eigentlichen Pfad passieren:

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

ShowPicture nicht den Pfad des Bildes will er muss zeigen, aber Ihre Antwort richtig ist, wird er es auf die abwart Objektliste, wie Sie mit toString() sagten, wird etwas wie A929D9933929919 -> die Objektreferenz – napi15

+0

Vielen Dank @Karolis, es funktioniert! :) – milk

0

Hallo Sie es in die Liste Objekt und nicht das Element in der Liste

verknüpfen Sie das Problem lösen sollte:

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

, die die pic1 bekommen

und wenn Sie wollen das pic2

erhalten Sie müssen schreiben:

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

, wenn Sie beide pic bekommen wollen, müssen Sie eine Schleife wie

etwas hinzufügen:

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

Porträts, lassen Sie mich Ihre erwartete Ergebnis genau wissen, und ich werde weitere Details hinzufügen

Verwandte Themen