我想要将所有图像从列表设置为网格 . 但我在使用 Children.Add
在网格中添加第二个图像时遇到问题 . 这是我的例子:
List<Image> images = new List<Image>(8);
images.AddRange(Enumerable.Repeat(new Image(), 8));//8 empty images
然后设置图像:
foreach (var image in images)
{
BitmapImage b = new BitmapImage();
b.BeginInit();
b.UriSource = new Uri("path");
b.EndInit();
image.Source = b;
image.Width = 50;
image.Height = 50;
}
然后在一个函数调用中这样:
private void put_images()
{
int i = 0;
foreach (var image in images)
{
Grid.SetRow(image, i);
Grid.SetColumn(image, i);
LayoutRoot.Children.Add(image);//here is error
i++;
}
}
我遇到了运行时错误: Additional information: Specified Visual is already a child of another Visual or the root of a CompositionTarget.
我不明白为什么,因为我有8个不同的图像,我不知道如何解决这个问题 .
2 回答
问题是您创建图像的代码 .
这是一个图像对象,集合中有8个引用 .
Enumerable.Repeat的文档说:
new Image()
的值是该Image的 reference .这意味着您对集合中的同一对象有8个引用 .
您可以通过比较列表中的第一个条目和第二个条目来轻松验证 .
solution 将使用
for
循环来实例化图像 .似乎问题在于创建图像 . 现在我不创建8个空图像,但我创建了Image,然后添加列表 . 现在它的工作: