我正在尝试将控件动态添加到窗口上的环绕面板,但是在将两个环绕面板控件添加到原始环绕面板控件后,它不再添加这里是我用来添加图像的代码
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.Left
和 Canvas.Top
属性(或 Canvas.Right
或 Canvas.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/