2011-04-04 73 views
0

我尝试两个Canvas添加到List<Canvas>,但我收到的异常从下面的代码:如何添加UIElement到列表<UIElement>?

List<Canvas> cvList = new List<Canvas>(); 

Canvas cv = new Canvas(); 
cv.Width = 100; 
cv.Height = 100; 

cvList.Add(cv); // adding first Canvas to List<Canvas> 
cvList.Add(cv); // adding the second Canvas to List<Canvas> 
... 

更详细地说明这个问题,每个Canvas必须是不同的,因为每一个可能的儿童不同TextBox,标签和其他UIElement。所以我认为上面的代码不应该工作。然而虽然我不能做到这一点:

Canvas cv1 = new Canvas(); 
cv1.Width = 100; 
Canvas cv2 = new Canvas(); 
cv2.Width = 250; 
... 

Or 

Canvas[] cv = new Canvas[myInt]; 

我不能做上述因为列表的大小是在运行时确定,我无法大小分配给数组或单独声明每个阵列。

如何正确执行此操作?是的,我已阅读MSDN上的列表,但该网站并未告诉我如何执行此操作。谢谢。

+1

你实际上添加了同样的画布两次,但这应该工作得很好。你能列出更多的代码以及你得到的错误是什么? – 2011-04-04 01:48:36

+0

我已经详细阐述了这个问题,希望澄清一些事情。 – KMC 2011-04-04 02:19:31

回答

1

为了详细说明Joels答案,这是你需要做的:

List<Canvas> cvList = new List<Canvas>(); 

Canvas canvas1 = new Canvas(); 
canvas1.Width = 100; 
canvas1.Height = 100; 
cvList.Add(canvas1); 

Canvas canvas2 = new Canvas(); 
canvas2.Width = 100; 
canvas2.Height = 100; 
cvList.Add(canvas2); 

注意,以这种方式添加相同的元素两次以同样的List<Canvas>集合是完全合法的,但试图使用相同元素在布局中两次(根据使用该列表的方式可能发生)不是。

+1

但是两次添加相同的对象是完全合法的,它不应该导致异常。所以这里可能会更多。 – 2011-04-04 01:55:33

1

您正在将同一个画布添加到列表中。如果您想在列表中使用两个不同的画布,则必须制作两个画布。请注意,您可以使用相同的变量来完成此操作,只需确保在将它们添加到列表之间时再次使用新的操作符。

+1

问题是,他/她可能不会真的需要两个不同的画布,但是这是必须的,因为列表中的这些元素很可能会在某个时间点作为视觉孩子添加。 (毕竟UIElements列表的要点不能被看到吗?) – 2011-04-04 03:20:40