mouseEnabledWhereTransparent не работает должным образом - PullRequest
2 голосов
/ 28 февраля 2011

Я просто не могу понять, почему mouseEnabledWhereTransparent не работает на этом скине.

Скин, который он создает, в основном представляет собой кнопку с прозрачным фоном и небольшим треугольником с левой стороны, например: > ButtonText Но пустое пространство вокруг треугольника не принимает события мыши.

Я попытался обернуть другую группу вокруг пути треугольника, и я попытался обернуть ее в графический объект, также безуспешно. Я мог бы создать Rect с 0 альфа ниже всего, но разве это не то, что mouseEnabledWhereTransparent должен делать для меня?

<?xml version="1.0" encoding="utf-8"?>
<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
             xmlns:fb="http://ns.adobe.com/flashbuilder/2009" minWidth="21" minHeight="21" alpha.disabled="0.5"
             mouseEnabledWhereTransparent="true">

    <!-- host component -->
    <fx:Metadata>
        <![CDATA[ 
        [HostComponent("spark.components.Button")]
        ]]>
    </fx:Metadata>

    <!-- states -->
    <s:states>
        <s:State name="up" />
        <s:State name="over" />
        <s:State name="down" />
        <s:State name="disabled" />
    </s:states>

    <!-- triangle tip -->
    <s:Path data="M 0 0 L 0 14 L 10 7 L 0 0" bottom="5">
        <s:fill>
            <s:SolidColor color="0xFFFFFF" />
        </s:fill>
    </s:Path>


    <!-- text -->
    <s:Label id="labelDisplay"
                 textAlign="center"
                 verticalAlign="bottom"
                 maxDisplayedLines="1" 
                 left="14" right="10" top="2" bottom="2" color="0x000000" fontSize="14">
    </s:Label>
</s:SparkSkin>

Ответы [ 2 ]

1 голос
/ 28 февраля 2011

Yo, вам нужно добавить прямоугольник перед этим путем, чтобы он действовал как область удара, это работает:

<s:Rect left="0" right="0" top="0" bottom="0" >
    <s:fill>
        <s:SolidColor alpha="0" />
    </s:fill>
</s:Rect>

Этот парень здесь имеет хороший примерпользовательские кнопки (без метки)

0 голосов
/ 01 марта 2011

mouseEnabledWhereTransparent не действует, если в группе, в которой он установлен, нет прослушивателей событий мыши.В вашем примере объект Button имеет прослушиватель события click, а объект обложки Button (SparkSkin) - нет.

Из ASDoc для GroupBase.mouseEnabledWhereTransparent:

"Это свойство входит только вэффект, если к этому экземпляру добавляются события жестов мыши, касания или флэш-плеера. "

Обходной путь для вас - добавить прослушиватель событий мыши в оболочку, который ничего не будет делать, например:

<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
             mouseEnabledWhereTransparent="true" click="doNothing()">
    <fx:Script>
        <![CDATA[
            protected function doNothing():void {
                trace('doNothing');
            }
        ]]>
    </fx:Script>
    ...
</s:SparkSkin>

Основным вариантом использования этого свойства было добавление событий щелчка непосредственно в группу, но интересно подумать о приведенном вами случае.Возможно, было бы целесообразно подать запрос на улучшение в соответствии со словами «Установка mouseEnabledWhereTransparent на тему оформления должна иметь эффект, если к hostComponent подключены прослушиватели мыши».

...