首页 > 解决方案 > 有没有办法在一个循环中将多个孩子添加到画布?

问题描述

首先,很抱歉这个问题对某些人来说似乎很容易,但我这个学期才开始学习 WPF。

我正在编写一个 WPF 项目作为学期的“目标”。我应该使用 JSON 数据将我的对象(太空船)放在屏幕上。如果我只将其中一艘船放在屏幕上,我可以通过这种方式轻松添加:

...
ship.Name = users[y].name;            
this.RegisterName(ship.Name, ship);
BitmapImage bi3 = new BitmapImage();
bi3.BeginInit();
bi3.UriSource = new Uri("C:/Users/Szabi/Desktop/spaceship.png", UriKind.Relative);
bi3.CacheOption = BitmapCacheOption.OnLoad;
bi3.EndInit();
ship.Source = bi3;
ship.Width = 100;
ship.Height = 150;
distance = Convert.ToDouble(shiplist[i].Distance);
velocity = Convert.ToDouble(shiplist[i].Velocity);
_angle = Convert.ToDouble(shiplist[i].Angle);
while (_angle[i] > 6.28)
  {
    _angle[i] = _angle[i] - (2 * Math.PI);
  }
left = (Math.Cos(Convert.ToDouble(shiplist[i].Angle))) * distance[i];
top = (Math.Sin(Convert.ToDouble(shiplist[i].Angle))) * distance[i];
Canvas.SetLeft(ship, (left + (sun.Width)));
Canvas.SetTop(ship, (top + (sun.Height)));
canvas.Children.Add(ship);    
ship.ToolTip = ship.Name;
...

然后我可以通过更改 Canvas.SetLeft 和 SetTop 来移动它,我每隔一秒左右调用一次新方法。

但是,如果我尝试将其放入一个循环中,并在服务器上创建尽可能多的这些船,那么它显然不起作用,因为画布只能有一个名为“船”的孩子。

编辑:忘了提。这些“船”中的每一个都应该是变量。它们是这样声明的:

Image ship = new Image(); 

据我所知,我只能把这些变量放到canvas.Children.Add()中。但是如果我添加第一艘船,我就不能再添加更多了。

EDIT2:我是一个该死的白痴。我应该只使用一个数组。

有没有解决这个问题的方法,或者有更好更简单的方法来创建我的船?

非常感谢您提前提供的帮助。

干杯。

标签: c#wpfimagecanvas

解决方案


推荐阅读