Flex: сделать часть кожи не фокусируемой / не реагирующей на клики - PullRequest
0 голосов
/ 15 февраля 2011

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>

С этим кодом я хочу, чтобы часть с идентификатором nonFocusableBackground не была частьюактивной области кожи / компонента (мой собственный термин).Однако в настоящее время эта часть, так как она больше, чем другая, будет нажимать кнопку при ее нажатии.

Я провел быстрый тест с использованием эффекта ореола, который дает приличные результаты, но это не так.именно то, что я хотел бы.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2011

Я не знаю, является ли это самым простым способом сделать это.Я действительно хотел бы иметь способ сделать все это прямо в 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 голосов
/ 15 февраля 2011

Я не верил, что графические примитивы принимают фокус. У них нет фокусных событий; и как бы пользователь сказал что-то было в фокусе? Что вы испытывали?

Вы можете поместить свою фигуру в UIComponent, а затем использовать UIComponent и использовать focusEnabled и hasFocusableChildren в false.

...