Bonjour,
j'ai un petit soucis sur un contrôle que je développe. Le principe de fonctionnement en est très simple, mais je me heurte à cette exception:
"L'objet Visual spécifié est déjà un enfant d'un autre objet Visual ou la racine d'une classe CompositionTarget."
Petite explication du contexte:
Je développe une sorte de barre des tâches. Elle est constituée principalement d'un StackPanel contenant des ComboBox, et d'une ComboBox contenant également des ComboBox.
En gros, lorsque l'utilisateur ouvre des fenêtres de mon application, je répertorie ces fenêtres en groupe (en fait, une ComboBox) que je viens ajouter au fur et à mesure au StackPanel.
Si le nombre de groupe dépasse la contenance du StackPanel, je viens ajouter les groupes suivants à la ComboBox située à coté du StackPanel.
Chaque ComboBox est également ajouté à une liste.
Cette partie du traitement ne pose aucun soucis (Oui, des Items.Add() C'est pas trop compliqué à faire :p).
Lorsqu'il y a trop de groupes d'ouverts, je veux donner la possibilité à l'utilisateur de faire passer un groupe de la ComboBox au StackPanel. Pour cela, je récupère l'objet sélectionné, mets à jour sa position dans ma liste contenant toutes les ComboBox, puis réaffecte les positions de chaque ComboBox.
Voici la méthode qui le fait :
C'est là que l'exception est levée : Il me dit que ma comboBox appartient déjà à un objet visual.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Private Sub MettreAJourAffichage() Dim combo As ComboBox 'Vide le panel et la ComboAutres de tous leurs items. panel.Children.Clear() comboBoxAutres.Items.Clear() 'Réaffecte la position des combobox. For index = 0 To _listeCombo.Count - 1 combo = _listeCombo.Item(index) If index <= _placeDispo - 1 Then combo.IsEnabled = True panel.Children.Add(combo) Else combo.IsEnabled = False comboBoxAutres.Items.Add(combo) End If Next End Sub
Pourtant, avant de réaffecter les positions, je fais :
panel.children.clear()
combobox.items.clear()
Les conteneurs sont donc normalement vides.
Par ailleurs, pour mes test, j'ai reproduit ce comportement avec un bouton. Je n'ai pas de combo sélectionnée du coup, mais je peux bien réaffecter les positions comme je le souhaites, en effectuant le même code (La même méthode est appelée dans les deux cas.)
Bon, plus que des paroles, un exemple est encore plus explicite.
Je vous mets donc en pièce jointe une solution reproduisant mon problème.
Si quelqu'un a une idée ... je suis preneur !
Partager