Как получить событие ComboBox SelectionChanged для запуска из вложенного ListBoxItem? - PullRequest
0 голосов
/ 27 октября 2009

Это довольно сложная проблема, которая меня сейчас сильно смущает. Любая помощь будет принята с благодарностью.

Настройка:
ListBox типа A UserControls
-> ListBoxItem типа A UserControl
-> ListBox типа B UserControls
---> ListBoxItem типа B UserControl
----> ListBox типа C UserControls
-----> ListBoxItem типа C UserControl (содержит ComboBox)

Другими словами, элемент управления типа A имеет элементы управления ListBox типа B, которые имеют элементы управления ListBox типа C. Все элементы управления имеют иерархическую природу. Тип A содержит данные, необходимые для загрузки элементов управления типа B, а тип B содержит данные, необходимые для загрузки элементов управления типа C. Элемент управления типа C имеет стандартный ComboBox для изменения значений существующих элементов. В дополнение к вышеприведенной структуре, я перетащил привязку к событию PreviewMouseLeftButtonDown на уровнях UserControl типа A и типа B для обработки команд переупорядочения / удаления / etc в графическом интерфейсе. Все это работает как задумано.

Проблема:
Когда я пытаюсь изменить значение в ComboBox, событие SelectionChanged никогда не срабатывает на «уровне» типа C, если я не буду достаточно осторожен, чтобы нажимать на границы / интервалы между любыми элементами управления типа A или B. Это происходит, когда мое всплывающее меню ComboBox накладывается на элемент управления типа A или B. События выбора для типа A или B запускаются вместо событий типа C, поэтому ComboBox никогда не изменяет свое значение надежно. В отладчике код для обработки перетаскивания запускается в следующем ListBoxItem, который расположен под ComboBox.

Мысль:
Есть ли способ заставить мое всплывающее окно ComboBox превалировать над элементами позади него, будучи вложенным в ListBox (т.е. игнорировать что-либо позади него, пока оно открыто)?
Есть ли способ перенаправить неправильно запущенные события SelectionChanged в ComboBox, который должен их запускать?

1 Ответ

0 голосов
/ 28 октября 2009

Итак, я разобрался с ответом. Мне пришлось добавить свойство к элементам управления типа A и B, которое рекурсивно проверяет наличие открытых ComboBox-ов. Когда какие-либо события выбора происходят внутри функций перетаскивания, я проверяю свойство перед обработкой перетаскивания. Если есть какие-либо открытые ComboBox, я просто вызываю Exit Sub, и он правильно обрабатывает событие click.

...