我对 WPF 有一个奇怪的问题,我在运行时从磁盘加载图像并将它们添加到 StackView 容器中。但是,图像没有显示。经过一番调试,我找到了诀窍,但它真的没有任何意义。我制作了一个小型演示应用程序来识别问题:
新建一个WPF项目,粘贴代码如下:
xml:
<Window x:Class="wpfBug.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">
<StackPanel Name="sp">
</StackPanel>
</Window>
xaml.cs,粘贴下面的默认使用:
namespace wpfBug
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Image i = new Image();
BitmapImage src = new BitmapImage();
src.BeginInit();
src.UriSource = new Uri("picture.jpg", UriKind.Relative);
src.EndInit();
i.Source = src;
i.Stretch = Stretch.Uniform;
//int q = src.PixelHeight; // Image loads here
sp.Children.Add(i);
}
}
}
将图像复制到 bin/Debug 文件夹并将其命名为“picture.jpg”
该程序不显示任何内容,除非注释行未注释。
谁能解释我做错了什么,或者为什么会这样?如果删除图像并运行程序,它会在“int q= ...”行生成异常。如果该行被注释,即使没有图像,程序也会毫无例外地运行。仅在必要时才加载图像,但是当我将图像控件添加到 StackPanel 时应该加载图像。
有什么想法吗?
编辑:顺便说一句,如果您将图像添加为资源,则不需要“int q = ..”行。