Flex:使皮肤的一部分不可聚焦/不可点击

时间:2011-02-15 00:47:02

标签: flash flex button flex4 skin

AKA:如何在皮肤中设置hitArea。

我需要使柔性皮肤的一部分不可聚焦/不可点击,即当鼠标点击按钮的那一部分时,它实际上不会被点击。

基本上,我希望那部分是阴影或高光或背景或任何你想称之为的东西。它以某种方式完成了投影,但我想要比使用过滤器更精细的控制。

示例代码:

<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009"
         xmlns:s="library://ns.adobe.com/flex/spark" >
    <fx:Metadata>
        <![CDATA[ 
            [HostComponent("spark.components.Button")]
        ]]>
    </fx:Metadata>
    <s:Ellipse id="nonFocusableBackground"
        left="-20" right="-20" bottom="-20" top="-20">
        ...
    </s:Ellipse>

    <s:Rect id="focusableForeground" left="0" right="0" top="0" bottom="0">
        ...
    </s:Rect>
</s:SparkSkin>

使用此代码,我希望id为nonFocusableBackground的部分不属于外观/组件的活动区域(我自己的术语)。但是,目前这个部分,因为它比其他部分大,所以在点击它时会点击该按钮。

我使用光环效果进行了快速测试,产生了不错的结果,但这并不是我想要的。

2 个答案:

答案 0 :(得分:0)

我不相信图形基元接受焦点。他们没有焦点事件;用户如何讲述焦点?你经历过什么?

您可以将Shape放在UIComponent中,然后使用UIComponent并使用focusEnabledhasFocusableChildren为false。

答案 1 :(得分:0)

我不知道这是否是最简单的方法。我真的想有办法直接在mxml中完成所有这些。

以下是我现在解决的问题:

皮肤声明中的

creationComplete="setHitArea(event)"
脚本中的

protected function setHitArea(event:FlexEvent):void
    {
        this.clickGroup.mouseEnabled = false;
        this.hitArea = this.clickGroup;
        this.hostComponent.hitArea = this.clickGroup;
    }

其余:

<s:Group id="clickGroup" left="0" right="0" top="0" bottom="0">
    <s:Rect id="focusableForeground" left="0" right="0" top="0" bottom="0">
    ...
    </s:Rect>
</s:Group>