向wrap面板动态添加WPF控件

本文关键字:添加 WPF 控件 动态 wrap | 更新日期: 2023-09-27 17:54:34

我试图动态添加控件到窗口上的自动换行面板但是在两个自动换行面板控件添加到原始的自动换行面板控件后它不再添加了这里是我用来添加图像的代码

 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;
    }

向wrap面板动态添加WPF控件

为了在容器控件中随机放置图像,不应该使用WrapPanel,而应该使用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可能多次返回相同的数字。