2011-02-15 71 views
0

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的一部分,不會對皮膚/組件的有效面積(我自己的術語)的一部分。然而,目前這部分由於比另一部分大,因此點擊按鈕時會點擊該按鈕。

我已經做了一個使用光環效果的快速測試,可以產生不錯的效果,但這並不是我想要的。

回答

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> 
0

我不相信圖形原語接受焦點。他們沒有焦點事件;以及用戶如何說出一些焦點?你有什麼感受?

您可以將您的形狀放在UIComponent中,然後使用UIComponent並使用focusEnabledhasFocusableChildren爲false。

+0

對不起,我沒有」要清楚地表明這是在皮膚內。 – forivall 2011-02-15 01:29:44