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

问题描述:

AKA:如何在皮肤中设置hitArea。Flex:使皮肤的一部分不可聚焦/不可点击

我需要使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的一部分,不会对皮肤/组件的有效面积(我自己的术语)的一部分。然而,目前这部分由于比另一部分大,因此点击按钮时会点击该按钮。

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

我不知道这是否是最简单的方法。我真的很想有一种方法可以直接在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> 

我不相信图形原语接受焦点。他们没有焦点事件;以及用户如何说出一些焦点?你有什么感受?

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

+0

对不起,我没有”要清楚地表明这是在皮肤内。 – forivall 2011-02-15 01:29:44