以编程方式将图像添加到 StackPanel

11

我正在尝试以编程方式生成一个StackPanel并向其添加一个Image。但是,我得到了一个空的StackPanel。我认为我的代码没有问题,也没有抛出任何异常:

StackPanel Sp = new StackPanel();
Sp.Orientation = Orientation.Horizontal;

Image Img = new Image();
BitmapImage BitImg = new BitmapImage(new Uri(
    "/MyProject;component/Images/image1.png", UriKind.Relative));
Img.Source = BitImg;

Sp.Children.Add(Img);

[编辑]

我尝试了另一种添加图像的方式,它起作用了。这让我很好奇,因为它们在我看来本质上是相同的:

下面的代码可以工作(显示图像):

Image Img = new Image();
Img.Source = new BitmapImage(new Uri(
             "pack://application:,,,/MyProject;component/Images/image1.png"));

以下代码无法工作(图像缺失):

Image Img = new Image();
BitmapImage ImgSource = new BitmapImage(new Uri(
    "pack://application:,,,/MyProject;component/Images/image1.png",
    UriKind.Relative));
Img.Source = BitImg;

它们为什么不同?


1
请确保图像文件的URI正确,并且您还需要将img.Width和img.Height属性设置为预期值。 - Developer
1
你是否将 StackPanel 添加到已经存在于 XAML 中的其他面板中?除非将 StackPanel 添加到某个面板中,否则它不会在屏幕上呈现。请确保将 StackPanel 添加到现有面板中。 - Bathineni
设置宽度和高度,但仍然没有图像。该图像位于Images文件夹中。 - KMC
1
你不会忘记在窗口中添加sp了吧? - H H
我还向StackPanel添加了一些其他的TextBlock和Buttons。除了缺少图像之外,其他所有内容都正常显示... - KMC
显示剩余2条评论
4个回答

13
Img.Source = new BitmapImage(new Uri(
             "pack://application:,,,/MyProject;component/Images/image1.png"));

默认使用UriKind.Absolute而不是UriKind.Relative

如果您希望使用UriKind.Relative - URI应该采用不同的格式。请查看MSDN


谢谢 :-) 这并不好笑,因为在使用错误的字符串作为 URI 时未检测到异常。 - mnemonic

5

不可复现。

我将您的代码复制粘贴到按钮处理程序中,并添加了一行:

  root.Children.Add(Sp);

提示:在此代码结尾处设置断点,并使用“WPF树形可视化器”查看所有内容是否在您认为的位置。它位于“局部变量”和“自动变量”窗口中的小放大镜图标。


谢谢,但那似乎不是问题所在。我稍微修改了一下代码,它运行了,但我仍然不明白。请看我的编辑后的问题。 - KMC

1

这段代码运行良好

Uri uri = new Uri("/Assets/default.png", UriKind.Relative);    
BitmapImage imgSource = new BitmapImage(uri);    
profileImage.Source = imgSource;

或者
BitmapImage image = new BitmapImage(new Uri("/Assets/default.png", UriKind.Relative));
profileImage.Source = image;

0

你的第一段代码没有问题。在代码结尾处,你应该将StackPanel添加到窗口或窗口内的网格中。同时请注意,图像的构建操作必须是“资源”,在你的图像URI(“/MyProject;component/Images/image1.png”)中,“MyProject”应该是你程序集的名称,而不是你项目的名称。在项目属性的应用程序选项卡中检查你的程序集名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接