2010-05-27 211 views
2

感谢您的阅读。FLEX:UIComponent点击处理程序?

我正试图在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 2010-05-28 13:18:05

0

您可以尝试使用mx:Spacer吗? UIComponent虽然不是容器,但可能是你的问题。您可以尝试扩展mx.core.Container,而不是使用UIComponent。但先尝试一下垫片。

编辑:我越想这个,我认为隔离垫会工作得越多。对于UI组件单击处理程序,实际发生的情况是UI组件中的单个元素正在注册点击,并且它们正在冒泡。随着你做了一个动作,就像其他答案所建议的,实际上没有任何东西可以注册点击。隔离垫应该解决这个问题,并且更容易。

0

我认为一个UI组件会遇到与处理点击时画布(从UI组件扩展)相同的问题。当您单击画布时,除非您将该画布设为背景,否则即使将Alpha设置为0(完全透明),也不会发生任何反应。这是Adobe知道的一个错误,但尚未解决,这个想法是没有BG实际上意味着没有任何东西。只是给它的背景使它可以点击。现在不幸的是,UIComponent没有任何背景风格,你可以切换到画布吗?另一种选择可能是在UIComponent中包含一个图像,将其alpha设置为0,将高度和宽度设置为100%