动态向Wrap Panel中添加WPF控件

3

我正在尝试在窗口的wrap panel上动态添加控件,但是在原始wrap panel控件添加了两个wrap panel控件后,它就不再添加了。以下是我用于添加图像的代码:

 Random rn = new Random();
 ImageContainer.Children.Add(displayimage(rn.Next(amount)));            
 ImageContainer.InvalidateVisual();

我刚接触 WPF,想知道是否做错了什么或者遗漏了什么。

非常感谢任何帮助。

编辑

        public WrapPanel displayimage(int i)
       {

        WrapPanel pn = new WrapPanel();
        pn.Width = 350;
        pn.Height = 400;
        pn.Background = new SolidColorBrush(Colors.White);
        BitmapImage bm = new BitmapImage(new Uri(imagePaths[i]));
        Image im = new Image();
        im.Source = bm;
        im.Height = 300;
        im.Width = 400;
        im.Margin = new Thickness(25,25,25,25);
        pn.Children.Add(im);
        pn.Margin = Location(pn);
        pn.ClipToBounds = true;

        return pn;

    }

我正在尝试将图像添加到我的WrapPanel中,随机放置在屏幕上,但最多只会添加两个图像,这些图像每5秒钟添加一个。 - Roy James Schumacher
@Clemens 那个按钮只是举例而已。我相信这是因为这段代码片段:ImageContainer.Children.Add... - Venson
@RoyJamesSchumacher 而 ImageContainer.Children.Add 呢?它是在某个循环中还是在定时器回调函数中被调用的? - Clemens
pn.Margin = Location(pn) 这段代码是什么意思? - Clemens
imagecontainer.children.add 在时间回调中被调用,pn.margin = Location(pn) 根据最大值1000的随机数来设置 WrapPanel 的位置。 - Roy James Schumacher
显示剩余4条评论
1个回答

6
为了在容器控件中随机放置图像,您不应该使用WrapPanel,而是应该使用Canvas。Canvas适用于元素的绝对定位。您可以通过设置Canvas.LeftCanvas.Top属性(或Canvas.RightCanvas.Bottom)来设置Canvas的子元素的位置。

此外,您不需要任何“内部”面板,因为Image是一个可以直接添加到任何容器中的控件。

因此,请按以下方式更改您的displayimage方法:

public UIElement GetDisplayImage(int i)
{
    var bm = new BitmapImage(new Uri(imagePaths[i]));
    var im = new Image
    {
        Source = bm,
        Height = 300,
        Width = 400
    };
    var location = Location(im);
    Canvas.SetLeft(im, location.X);
    Canvas.SetTop(im, location.Y);
    return im;
}

现在将这些图像添加到画布中:
Random rn = new Random();
ImageCanvas.Children.Add(GetDisplayImage(rn.Next(amount));

InvalidateVisual 不是必需的。


您可能还需要注意,由于Random.Next可能会多次返回相同的数字,因此不要重复添加图像。


非常感谢,这正是我想要的效果,你帮了我很多。至于同一个数字被多次返回,我不太担心,因为我允许我的图像重叠添加。再次感谢你。 - Roy James Schumacher

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