我有一个WrapPanel
包含多个Canvas
相同大小的。每个Canvas
都有一些UIElement
s(即TextBox
, TextBlock
, Button
s 等)作为孩子。每个Canvas
(包括其UIElement
子级)的创建和Canvas
要创建的数量都在运行时代码后面(没有 XAML)中完成。
最初我做了以下工作:
// declare as class properties, so all function can access them
WrapPanel wp = new WrapPanel();
Canvas[] cv = new Canvas[500];
TextBox[] tb = new TextBox[500];
// A function (e.g. a Button_Click event) that generates multiple Canvas in a WrapPanel
for (int i = 0; i<myInt; i++)
{
cv[i] = new Canvas();
tb[i] = new TextBox();
cv[i].Children.Add(tb[i]);
wp.Children.Add(cv[i]);
}
上面的代码很简单,可以正常工作 - 直到我在我可以实现的地方实现添加、减号和销毁按钮
1. Add an additional `Canvas` on a click event
2. Remove the last `Canvas` on a click event
3. Destroy a specific `Canvas` in the `WrapPanel` on a click event (may ba a little cross icon in each `Canvas`)
如果我处理上述 3 个操作的某种组合,我可以轻松地创建相同索引的 UIElements 或创建超出最初声明范围的 Canvas。
然而,我查看了List,每个 Canvas 都有不同的属性(每个 Canvas 也有具有不同属性的 UIElement Children),我不知道 List 如何解决它。我解决这个问题的一种方法是为 Canvas 声明一个超大的数组大小(例如Canvas[] cv = new Canvas[99999]但我认为这不是很有效。
另外,如果我使用 List,如何在生成特定 UIElement 后更改它们的属性?例如,如果我添加 10 个画布并添加到列表中,并且在它们全部生成之后,我需要选择第 5 个画布并更改一个 TextBox.Text,我如何像在数组中那样访问它(即 tb[5].文本=“你好”)?
谁能告诉我一些解决这个问题的方法?