Laden...

An Image.Source zugewiesenes Bild wird nicht dargestellt

Erstellt von Quaneu vor 13 Jahren Letzter Beitrag vor 13 Jahren 7.403 Views
Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 13 Jahren
An Image.Source zugewiesenes Bild wird nicht dargestellt

Hallo,
ich hätte eine Frage zu Image.Source.

Ich habe eine statische Klasse, die ein kleines Window mit einem PNG-Bild erzeugt.

Der Code sieht wie folgt aus:


        public static void Show()
        {
            Window _win = new Window();
            Image _Image = new Image();
            BitmapImage _BitmapImage = new BitmapImage();

            _Image.Width = 48;
            _Image.Height = 48;
            _BitmapImage.BeginInit();
            _BitmapImage.UriSource = new Uri(@"/Images/Warning.png", UriKind.RelativeOrAbsolute);
            _BitmapImage.DecodePixelWidth = 48;
            _BitmapImage.EndInit();
            _Image.Source = _BitmapImage;
            _win.Content = _Image;
            _win.ShowDialog();
         }

Doch es wird niemals das Bild angezeigt... was mache ich falsch?

Viele Grüße

Quaneu

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo Quaneu,

ist der Pfad zum Bild sicher richtig?
Ist dieses auch als Ressource eingestellt?

Bezüglich des Pfades... Versuchs mal mit einem relativen Pfad, vielleicht haste damit mehr erfolg

Gruss
Michael

Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 13 Jahren

Ist zu 100% richtig. Das Bild befindet sich im Ordner Images und dieser befindet sich im Ordner in der die Klasse gespeichert ist (damit ich nun UriKind.Relative benutze kann).

Habs jetzt mit


...
 _BitmapImage.UriSource = new  Uri("Images/Warning.png", UriKind.Relative);
...

versucht, aber klappt leider immer noch nicht... wenn ich _BitmapImage.Height aufrufe ist sie ständig 0 oder aber er sagt er kann den Pfad nicht finden (was ich aber überhaupt nicht verstehe)

UPDATE:
Ich weiß nun woran es liegt, doch weiß ich leider nicht wie ich es lösen kann.
Das Problem ist, dass ich einen OpenFileDialog habe. Und nach diesem "zeigt" Environment.CurrentDirectory auf den Ordner in dem ich die Datei im OpenFileDialog ausgewählt habe. Daher klappt es nicht mehr mit UriKind.Relative...
Wie bekomme ich jetzt z.B. die Uri des Projektes in dem die Klasse "steht"?

916 Beiträge seit 2008
vor 13 Jahren

Ist zu 100% richtig. Das Bild befindet sich im Ordner Images und dieser befindet sich im Ordner in der die Klasse gespeichert ist (damit ich nun UriKind.Relative benutze kann).

Das muss doch der relative Pfad (zur Laufzeit) zu deiner Assembly sein. Probier es doch einfach mal mit einem festen Pfad, und wenn das klappt, dann weist du wo der Fehler liegt.

Again what learned...

F
60 Beiträge seit 2010
vor 13 Jahren

Ich weiß nun woran es liegt, doch weiß ich leider nicht wie ich es lösen kann.
Das Problem ist, dass ich einen OpenFileDialog habe. Und nach diesem "zeigt" Environment.CurrentDirectory auf den Ordner in dem ich die Datei im OpenFileDialog ausgewählt habe.

Dafür gibts die property FileDialog.RestoreDirectory, ansonsten einfach relativ von deiner assembly arbeiten.

Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 13 Jahren

Habs gerade hin bekommen über die assembly, trotzdem vielen Dank.

So sieht meine Lösung aus:


_BitmapImage.UriSource = new Uri("pack://application:,,,/VisualDataModelerControls;component/images/Info.png"); 

1.552 Beiträge seit 2010
vor 13 Jahren
public static void Show()  
        {  
            Window _win = new Window();  
            Image _Image = new Image();  
            BitmapImage _BitmapImage = new BitmapImage();  
  
            _Image.Width = 48;  
            _Image.Height = 48;  
            _BitmapImage.BeginInit();  
            _BitmapImage.UriSource = new Uri(@"/Images/Warning.png", UriKind.RelativeOrAbsolute);  
            _BitmapImage.DecodePixelWidth = 48;  
            _BitmapImage.EndInit();  
            _Image.Source = _BitmapImage;  
            _win.Content = _Image;  
            _win.ShowDialog();  
         }  

Auch wenn ich es bevorzuge auch bei noch so kleinen Fenstern, auch wenn sie nur ein Bild beinhalten, eine XAML-Datei zu erstellen, sei dies nur mal so in den Raum gestellt worden.

Gruß Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 13 Jahren

Das mache ich normal auch, aber ich baue so eine Art MessageBox nach und diese soll je nach dem anders aussehen, daher habe ich mich für diesen Weg entschieden.
Denn wenn ich es per XAML machen würde, müsste ich es im Code auch selber zusammenbauen.

Das ging bei mir auch nicht... hatte ich nämlich auch schon probiert.

151 Beiträge seit 2009
vor 13 Jahren

Hallo Quaneu,

So würde es auch über den Pfad funktionieren:

 _Image.Source = new BitmapImage(new Uri(@"/Images/Warning.png", UriKind.RelativeOrAbsolute));

Grüßle
Jéré