Boardy
Boardy

Reputation: 36237

Showing image, there is no error but image is not displayed

I am working on a C# project, and I am having a strange problem. I have an Image control and I am trying to display an image within it. There is no error or exception thrown, but the image doesn't display.

Below is the code I am using:

BitmapImage image = new BitmapImage();
image.UriSource = new Uri("images\\low_battery.png", UriKind.Relative);
imageIcon.Source = image;
imageIcon.Visibility = System.Windows.Visibility.Visible;

I have the directory image and the image file low_battery.png running in the same directory as to where the executable is running from.

Thanks for any help you can provide.

Upvotes: 0

Views: 701

Answers (2)

Clemens
Clemens

Reputation: 128136

Either call image.BeginInit() before setting image.UriSource and image.EndInit() afterwards, or simply use the BitmapImage constructor that takes an Uri as argument:

var uri = new Uri("images\\low_battery.png", UriKind.Relative);
imageIcon.Source = new BitmapImage(uri);

Upvotes: 1

Moby Disk
Moby Disk

Reputation: 3861

A few suggestions:

1) You can get the exception from WPF if you subscribe to the ImageFailed even on imageIcon and the and DownloadFailed event on BitmapImage. Then put breakpoints in those methods and see what it says.

2) Before setting UriSource, call image.BeginInit(). After setting UriSource, call image.EndInit(). To help debug the problem, you can subscribe to the ImageFailed event on imageIcon and DownloadFailed on BitmapImage. So the final code looks like this:

BitmapImage image = new BitmapImage();
image.BeginInit();
image.UriSource = new Uri("/images/low_battery.png", UriKind.Relative);
image.DownloadFailed += image_DownloadFailed;
image.EndInit();

imageIcon.ImageFailed += imageIcon_ImageFailed;
imageIcon.Source = image;
imageIcon.Visibility = System.Windows.Visibility.Visible;

and further down:

void imageIcon_ImageFailed(object sender, ExceptionRoutedEventArgs e)
{
    // Breakpoint here
}

void image_DownloadFailed(object sender, ExceptionEventArgs e)
{
    // Breakpoint here
}

3) Another way to do this is to embed images directly into your project. Do that by adding an images folder into your project, then adding the image, and setting the type to "Resource"

Upvotes: 1

Related Questions