2014-07-21 167 views
0

我正在开发一个C#项目,并且遇到了一个奇怪的问题。我有一个图像控件,我试图在其中显示图像。没有错误或异常抛出,但图像不显示。显示图像,没有错误,但图像不显示

下面是我使用的代码:

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

我有目录图像和图像文件low_battery.png在同一目录中的可执行文件运行,其中运行。

感谢您提供的任何帮助。

+0

实际上'images \\ low_battery.png'上有图像吗? –

+2

你把图片放在哪里?它不会出现,除非你真的把它放在窗口中。 –

+0

确保图像也是您项目资源的一部分。 –

回答

1

几点建议:

1)如果你订阅ImageFailed甚至ImageIcon的和BitmapImage的在和DownloadFailed事件你可以从WPF例外。然后在这些方法中加入断点并查看它所说的内容。

2)在设置UriSource之前,调用image.BeginInit()。设置UriSource后,调用image.EndInit()。为了帮助调试问题,您可以订阅ImageIcon上的ImageFailed事件和BitmapImage上的DownloadFailed。所以,最终的代码如下所示:

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; 

进一步回落:

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

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

3)另一种方式做,这是直接嵌入图片到你的项目。做到这一点通过添加图像文件夹到您的项目,然后添加图像,并设置类型为“资源”

+0

谢谢,我总是被开始和结束初始化陷入困境。 – Boardy

+0

@Boardy几乎没有什么好的理由使用它。改为使用其他BitmapImage构造函数。 – Clemens

1

要么调用image.BeginInit()设置image.UriSourceimage.EndInit()事后之前,或者干脆使用BitmapImage的构造函数的URI作为参数:

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

我比BeginInit()/ EndInit()更喜欢构造函数方法。 –