J'ai un WrapPanel
qui contient plusieurs Canvas
de la même taille. Chaque Canvas
a quelques UIElement
s (c'est-à-dire TextBox
, TextBlock
, Button
s etc.) comme enfants. La création de chaque Canvas
(y compris ses enfants UIElement
) et le nombre de Canvas
à créer sont tous effectués dans le code d'exécution derrière (aucun XAML).Tableaux UIElement dynamiques et immuables
Au départ, je l'ai fait ce qui suit, qui fonctionne:
// 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]);
}
Le code ci-dessus est fonctionne directement vers l'avant OK - Jusqu'à ce que je mets en œuvre ajouter, moins et détruire les boutons où je pouvais
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`)
Si je traiter une combinaison des 3 actions ci-dessus, je pourrais facilement créer des UIElements du même index ou créer des Canvas qui sortent de la portée de ce qui avait été déclaré initialement.
J'ai regardé dans Liste Cependant, chaque Canvas a des propriétés différentes (chacun a aussi UIElement Children avec des propriétés différentes) et je ne peux pas comprendre comment List le résoudrait. Une façon pour moi de faire le tour qui est de déclarer une super grande taille Array pour Canvas (par exemple Canvas [] cv = new toile [99999] mais je pensais que ce n'est pas très efficace.
De plus, si j'utilise la liste , comment pourrais-je changer les propriétés d'un UIElement spécifique après qu'elles soient générées? Par exemple si j'ajoute 10 Canvas et ajoute à la liste, et après qu'elles soient toutes générées, je dois choisir le 5ème Canvas et changer un TextBox.Text, comment faire J'AccessIT comme je l'ai fait dans un tableau (c.-à-tb [5] .Text = « Bonjour »)?
quelqu'un peut-il me montrer des approches de ce problème?
Si vous avez besoin d'un tableau qui peut rétrécir/grossir, vous demandez une liste. Pouvez-vous expliquer pourquoi une liste ne fonctionnerait pas dans votre cas? –
@vanja, j'ai édité ma question qui espère devrait clarifier le problème. – KMC
1. N'utilisez pas de listes parallèles. Faites un type qui représente chaque entrée en entier, et gardez une seule liste de ce type, pas plusieurs listes où chacune n'a qu'une partie de l'histoire. 2. Vous devriez vraiment regarder dans MVVM. –