Zur Entwurfszeit ist pack uri gültig, aber nicht zur Laufzeit?

8

Ich setze den Inhalt einer Schaltfläche auf ein Bild. Es sieht ungefähr so ​​aus:

%Vor%

In meinem Projekt habe ich einen Unterordner mit dem Namen NavigationImages und in diesem Ordner befindet sich die Bilddatei nav_up_left.png.

Wenn ich den Designer anschaue, erscheint das Bild, aber während der Laufzeit bekomme ich einen IOException Fehler, der besagt, dass die Ressource nicht gefunden werden kann.

Die Build-Aktion ist auf Ressource festgelegt.

Eigentlich hat das in einem Projekt gut funktioniert. Aber wenn ich es über das andere Projekt kopiere, scheitert es. Das scheint ein unglaublich einfaches Problem zu sein, aber ich finde mich ratlos und bereit, Haare auszuziehen. @ _ @

Ihre Gedanken und Vorschläge werden sehr geschätzt!

    
Ashley Grenon 26.07.2011, 20:16
quelle

4 Antworten

9

Welpe, ich habe es herausgefunden ... irgendwie.

Ich habe diesen XAML-Code von einem Projekt mit dem Ausgabetyp Windows-Anwendung in ein anderes Projekt kopiert, in dem der Ausgabetyp Klassenbibliothek lautet.

Ich habe zu der Zeit nicht darüber nachgedacht, aber anscheinend, wenn der Ausgabetyp eine Klassenbibliothek ist, muss der Paket-URI geändert werden.

Also anstelle von "pack://application:,,,/NavigationImages/nav_up_left.png" habe ich es in "/ProjectName;component/NavigationImages/nav_up_left.png" geändert und jetzt funktioniert es gut.

Ich bin nicht 100% klar, warum das funktioniert und nicht das erstere. Ich habe die MSDN-Dokumentation zu Pack-URIs in WPF aber vielleicht habe ich etwas falsch interpretiert.

Ich lasse diese Antwort deaktiviert, wenn jemand mir eine gute Erklärung geben kann, warum das, was ich vorher hatte, nicht in einem Projekt mit dem Ausgabetyp Klassenbibliothek funktioniert.

Ich vermisse wahrscheinlich etwas wirklich Einfaches. @ _ @

    
Ashley Grenon 26.07.2011, 22:18
quelle
3

Ich hatte gerade eine Weile mit dem gleichen Problem zu kämpfen, und ich denke, dass ein Teil dessen, was im Original schief gelaufen ist, das fehlende Wort "Komponente" war. Ich hatte zum Beispiel

%Vor%

aber sollte gehabt haben

%Vor%

Das Wort "Komponente" ist trotz seines Aussehens kein Teil des Pfadnamens - es ist ein String-Literal, das da sein muss. Warum? Jemand dachte, es wäre eine gute Idee, denke ich.

Und für diejenigen, die mit einem anderen Teil der Sache kämpfen, was ist mit "MyApp"? Das ist der Name der Versammlung. Klicken Sie mit der rechten Maustaste auf Ihren Projektnamen, wählen Sie "Eigenschaften ...", und unter der Registerkarte "Anwendung" wird das Feld "Assemblyname:" angezeigt.

Wenn Sie nicht danach suchen möchten (oder Bedenken haben, dass sich das ändern könnte, indem Sie Ihren Code brechen), können Sie Folgendes tun:

%Vor%

Nicht sehr schöner Code, ich gebe zu - er kann deutlich verkürzt werden - aber er bringt Sie dahin, wo Sie hin müssen, hoffe ich. Denken Sie daran, die "Build" -Eigenschaft in Ihrer Bilddatei auf "Ressource" zu setzen!

    
John 30.10.2013 19:14
quelle
2

Nur um zu zeigen, was in Ihrer Situation vor sich ging. Die zweite Packung uri. Derjenige, der funktioniert hat. Ist für Ressourcen gedacht, die sich in einer anderen Assembly als der Host-Anwendung befinden. Mit den Geräuschen, die Host-Anwendung wurde diese Ressource aus der fraglichen Klassenbibliothek geladen?

Sie können die Unterschiede in den Pack-Uri-Schemas hier sehen: SilverX 22.02.2013 00:42

quelle
1

Eine andere Lösung, um das richtig zu machen:

Sobald Ihr Bild Build-Aktion auf "Ressource" gesetzt ist und Sie es wiederhergestellt haben, navigieren Sie zu den Eigenschaften Ihres <Image /> -Objekts. Das Eigenschaftsfenster stellt einen ... Dateiressourcenbrowser zur Verfügung, woraufhin bei der Auswahl Ihres Bildes das Attribut Source="..." Ihres <Image /> korrekt ausgefüllt wird.

    
DuckMaestro 16.08.2012 23:42
quelle

Tags und Links