2010-05-27 2 views
2

Спасибо за чтение.FLEX: UIComponent Click Handler?

Я пытаюсь поместить ярлык и изображение на UIComponent, бок о бок. Я хочу использовать UIComponent по соображениям эффективности, а весь компонент сложнее, чем просто кнопка со значком.

Я пытаюсь получить обработчик кликов на всем UIComponent, так что, когда клик происходит на ярлыке или изображении, вызывается тот же обработчик события [click]. Если я добавлю обработчик кликов на корневой компонент, он работает, но когда я ввожу пробел между меткой и изображением, пространство между ними становится неактивным. Я создаю пространство с помощью метода move (x, y) для метки и изображения с небольшим зазором между координатами x/y.

Любые идеи, как исправить это?

Спасибо.

ответ

1

Что касается ответа invertedSpear, это не ошибка, это известное поведение. Бывают ситуации, когда вы не хотите, чтобы фон контейнера фиксировал клики, и это позволяет вам контролировать это.

invertedSpear правильно, что UIComponent не обрабатывает собственные стили фона. Вы можете нарисовать свой собственный прозрачный фон для захвата событий мыши:

override protected function updateDisplayList(w:Number, h:Number):void 
{ 
    super.updateDisplayList(w, h); 

    var g:Graphics = this.graphics; 
    g.clear(); 
    g.beginFill(0xFF0000, 0); // Fully transparent colour. 
    g.drawRect(0, 0, w, h); // Draw to the full size of the UIComponent. 
    g.endFill(); 
} 
+0

Отлично! Благодаря! Простой, понятный и не объектный экземпляр [быстрый]. – davidemm

0

Вы могли бы попробовать mx: Spacer вместо этого? UIComponent - это не контейнер, но это может быть вашей проблемой. Вместо использования UIComponent вы можете попытаться расширить mx.core.Container. Но сначала попробуйте распорку.

Редактировать: Чем больше я думаю об этом, тем больше я думаю, что спейсер будет работать. Для обработчика кликов компонента пользовательского интерфейса, что действительно происходит, отдельные элементы в компоненте пользовательского интерфейса регистрируют клики, и они пузырятся. Когда вы делаете ход, как и другой ответ, на самом деле нет ничего, чтобы зарегистрировать клик. Спейсер должен решить эту проблему и сделать это проще.

0

Я думаю, что компонент пользовательского интерфейса страдает от той же проблемы, что и холст (который простирается от компонента пользовательского интерфейса) при обработке кликов. Когда вы нажимаете на холст, ничего не происходит, если вы не дадите этому холсту фон, даже если вы установите альфа на 0 (полностью прозрачный). Это ошибка, о которой Adobe знает, но еще не исправлена, идея состоит в том, что отсутствие BG фактически означает, что там ничего нет. Просто давая этому фону, он делает его интерактивным. Теперь, к сожалению, у UIComponent нет фоновых стилей, можете ли вы переключиться на холст? Другой альтернативой может быть включение изображения в UIComponent, установка альфа-сигнала на 0 и высота и ширина до 100%

Смежные вопросы