0

又名:如何在皮肤中设置 hitArea。

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

基本上,我希望那部分是阴影、高光或背景,或者任何你想叫它的东西。它以某种方式通过阴影完成,但我希望比使用过滤器进行更好的控制。

示例代码:

<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 的部分不属于皮肤/组件的活动区域(我自己的术语)。但是目前这部分,因为它比其他部分大,所以点击时会点击按钮。

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

4

2 回答 2

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>
于 2011-02-15T18:59:59.357 回答
0

我不相信图形基元接受焦点。他们没有焦点事件;用户如何判断某物是焦点?你经历了什么?

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

于 2011-02-15T01:18:39.900 回答