2009-10-27 4 views
0

Ceci est un problème assez complexe qui m'a vraiment confus en ce moment. Toute aide serait grandement appréciée.Comment faire pour déclencher un événement ComboBox SelectionChanged à partir d'un ListBoxItem imbriqué?

Le programme d'installation:
ListBox de type A UserControls
-> ListBoxItem de type A UserControl
-> ListBox de type B UserControls
---> ListBoxItem de type B UserControl
---- > ListBox de type C UserControls
-----> ListBoxItem de type C UserControl (contient la liste déroulante)

En d'autres termes, le type a commande comporte une zone de liste de contrôles de type B qui a une zone de liste de type C contrôles. Tous les contrôles sont de nature hiérarchique. Le type A contient les données nécessaires pour charger les contrôles de type B et le type B contient les données nécessaires au chargement des contrôles de type C. Le contrôle de type C possède un contrôle ComboBox standard pour modifier les valeurs des éléments présents. En plus de la structure ci-dessus, j'ai drag and drop lié à l'événement PreviewMouseLeftButtonDown sur les deux niveaux UserControl Type A et Type B pour gérer les commandes réordonner/suppression/etc dans l'interface graphique. Tout cela fonctionne comme prévu.

Le problème:
Lorsque je tente de changer la valeur dans la zone de liste déroulante, le « niveau » événement SelectionChanged ne se déclenche sur le type C, à moins que je suis assez prudent de cliquer sur les frontières/espacement entre tout type A ou B contrôles. Cela se produit lorsque mon menu contextuel ComboBox chevauche un contrôle de type A ou B situé sous lui-même. Les événements de sélection pour Type A ou B sont déclenchés à la place des événements de Type C, de sorte que le ComboBox ne modifie jamais sa valeur de manière fiable. Dans le débogueur, le code pour gérer le glisser-déposer est déclencher sur le ListBoxItem suivant situé sous le ComboBox.

Pensées:
Est-il possible que je peux faire ma prévalence de prendre popup ComboBox sur les éléments derrière tout en double nichée dans un ListBox (c.-à ignorer tout derrière pendant qu'il est ouvert)?
Existe-t-il un moyen de rediriger les événements SelectionChanged qui déclenchent incorrectement vers le ComboBox qui est censé les déclencher?

Répondre

0

J'ai donc trouvé la réponse. J'ai dû ajouter une propriété aux contrôles Type A et B qui vérifient de manière récursive si des ComboBox sont ouverts. Lorsque l'un des événements de sélection se produit à l'intérieur des fonctions glisser-déposer, je vérifie la propriété avant de traiter le glisser-déposer. Si des ComboBox sont ouvertes, j'appelle simplement Exit Sub et traite correctement l'événement click.

Questions connexes