Можно ли пузырить MouseEvent по z-index вместо иерархии? - PullRequest
1 голос
/ 25 февраля 2010

У меня есть два компонента, которые абсолютно расположены в контейнере (это MapSymbols на карте ILOG Elixir, если это помогает). Каждый компонент представляет собой VBox с изображением и меткой. Изображения имеют функциональность, связанную с событием Click; этикетки нет.

Проблема в том, что 2 элемента расположены так, что метка одного над значком другого в z-index так, что метка съедает любые события mouseOver и mouseDown. Пузырьки не помогают, так как они пузыриваются от ярлыка до vbox к контейнеру, никогда не ударяя по нижнему элементу. Я не могу установить vbox на mouseChildren = "false", так как это также предотвращает нажатие на изображение.

Что я могу с этим сделать? Расположение и количество компонентов зависят от данных, а не от того, что я могу контролировать.

РЕДАКТИРОВАТЬ: некоторые разъяснения. Каждый отдельный компонент структурирован так:

<VBox>
    <Image source="whatever" click="handleClick()"/>
    <Label text="{item.label}/>
</VBox>

Проблема в том, что два из этих vbox расположены близко друг к другу - метка одного блока может быть над изображением другого блока, блокируя вам взаимодействие с нижним.

alt text
(источник: imnotpete.com )

В этом примере вторая метка блокирует нижний значок - события мыши передаются только при взаимодействии с нижней половиной этого значка.

Установка VBox на mouseEnabled="false" и метка на mouseEnabled="false" mouseChildren="false", похоже, не имеют никакого эффекта - метка по-прежнему блокирует нижнее изображение от получения событий мыши.

Ответы [ 2 ]

1 голос
/ 25 февраля 2010

Z-индекс определяется деревом отображения, а дочерние объекты DisplayObject с более высоким индексом отображаются над их братьями и сестрами, поэтому так оно и работает.

Что вам нужно сделать, так это поместить ваш ярлык внутри вашей кнопки, как ребенка, но если вы просто хотите работать с хаком, вам нужно:

label.mouseEnabled=false;
label.mouseChildren=false;
0 голосов
/ 25 февраля 2010

label.mouseEnabled = false; сделает область позади ярлыка кликабельной, разве это не то, что вам нужно?

...