2

谢谢阅读。

我正在尝试将标签和图像并排放置在 UIComponent 上。出于效率的原因,我想使用 UIComponent,整个组件比只是一个带有图标的按钮要复杂得多。

我试图在整个 UIComponent 上获得一个单击处理程序,以便在标签或图像上发生单击时,调用相同的 [click] 事件处理程序。如果我在根组件上添加一个点击处理程序,它可以工作,但是当我在标签和图像之间引入空间时,它们之间的空间变得不可点击。我通过对标签和图像使用 move(x,y) 方法来生成空间,x/y 坐标之间的间隙很小。

任何想法如何解决这个问题?

谢谢。

4

3 回答 3

1

关于invertedSpear的答案,它不是一个错误,它是已知的行为。在某些情况下,您不希望容器的背景捕获点击,而这种行为允许您控制它。

reverseSpear 是正确的,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();
}
于 2010-05-28T01:01:51.863 回答
0

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

编辑:我想得越多,我认为垫片越有用。对于 UI 组件点击处理程序,真正发生的是 UI 组件中的各个元素正在注册点击,并且它们正在冒泡。随着您采取行动,就像建议的其他答案一样,确实没有任何东西可以注册点击。垫片应该可以解决这个问题,而且更容易。

于 2010-05-27T19:50:28.580 回答
0

我认为 UI 组件在处理点击时会遇到与画布(从 UI 组件扩展而来)相同的问题。当您单击画布时,除非您为该画布提供背景,否则不会发生任何事情,即使您将 alpha 设置为 0(完全透明)也是如此。这是 Adob​​e 知道但尚未修复的错误,没有 BG 的想法实际上意味着那里什么都没有。只要给它背景,它就可以点击。现在不幸的是 UIComponent 没有任何背景样式,你可以切换到画布吗?另一种选择可能是在 UIComponent 中包含一个图像,将其 alpha 设置为 0,将高度和宽度设置为 100%

于 2010-05-27T20:23:00.583 回答