首页 文章

动态添加wpf控件以包装面板

提问于
浏览
3

我正在尝试动态地将控件添加到窗口上的包装面板但是在将两个包装面板控件添加到原始包装面板控件之后它不再添加这里是用于添加图像的代码

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

我是wpf的新手,只是想知道我是做错了什么或错过了什么 .

任何帮助将不胜感激

EDIT

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;

    }

1 回答

  • 6

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

    此外,您不需要任何"inner"面板,因为 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 可能会多次返回相同的数字 .

相关问题