У меня есть WrapPanel
, который содержит несколько Canvas
одинакового размера. Каждый Canvas
имеет несколько UIElement
с (то есть TextBox
, TextBlock
, Button
с и т. Д.) В качестве детей. Создание каждого 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`)
Если я обработаю какую-либо комбинацию из трех вышеуказанных действий, я мог бы легко создать элементы UIE с тем же индексом или создать Canvas, выходящий за пределы того, что было объявлено изначально.
Я просмотрел List , однако, у каждого Canvas есть разные свойства (у каждого также есть UIElement Children с разными свойствами), и я не могу понять, как List это решит. Для меня способ обойти это - объявить очень большой размер массива для Canvas (например, Canvas [] cv = new Canvas [99999] , но я думаю, что это не очень эффективно.
)
Кроме того, если я использую List, как я могу изменить свойства определенного UIElement после того, как они сгенерированы? Например. Если я добавлю 10 Canvas и добавлю в список, и после того, как все они будут сгенерированы, мне нужно выбрать 5-й холст и изменить TextBox.Text, как мне получить к нему доступ, как я это делал в массиве (т.е. tb [5] .Text = "Привет")?
Может кто-нибудь показать мне некоторые подходы к этой проблеме?