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

标签 c# wpf wpf-controls

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

 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,而应使用 Canvas。反而。 Canvas 是为元素的绝对定位而制作的。您可以通过设置 Canvas.LeftCanvas.Top 属性(或 Canvas.RightCanvas.Bottom).

此外,您不需要任何“内部”面板,因为 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;
}

现在将这些图像添加到 Canvas 中:

Random rn = new Random();
ImageCanvas.Children.Add(GetDisplayImage(rn.Next(amount));

InvalidateVisual 不是必需的。


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

关于c# - 动态添加 wpf 控件以包装面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14428456/

相关文章:

wpf - 如何在WPF中将焦点添加到可编辑的组合框

c# - 垃圾回收失败回收BitmapImage?

WPF:可编辑组合框;如何使搜索/自动填充功能区分大小写?

c# - DocumentViewer WPF 控件未加载

c# - 使用 Interop 从 DataGrid 导出到 Excel 太慢

c# - WPF 功能区上的右对齐(帮助)按钮

c# - 将图像从资源加载到图像控件

c# - Azure 应用程序注册更改主页 URL

c# - 获取 Ms Access 表名

c# - 如何在for循环中增加小时数