0 votes

Flex ne peut pas interagir avec le bouton dans itemrenderer

J'ai une liste avec un itemrenderer. Lorsque je place un bouton dans l'itemrenderer, je ne peux pas interagir avec lui. Si je survole le bouton, le survol de l'élément de la liste est déclenché, mais pas le survol du bouton. Je ne peux pas non plus cliquer sur le bouton. Vous pouvez voir ci-dessous que j'ai défini un événement de clic dans l'itemrenderer et qu'il n'est pas appelé lors du clic lorsque je lance l'application. Dois-je remplacer les méthodes rollover et click de l'itemrenderer ? Pourquoi est-ce si difficile de placer un bouton dans un itemrenderer ? Il doit me manquer quelque chose. Merci.

<!---From main.mxml-->
<s:List width="100%" borderVisible="false"
    itemRenderer="itemRenderers.data_resultLayersRenderer"
    dataProvider="{resultsLayers}"/>

<!---From itemRenderes-->
<s:ItemRenderer
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:skins="skins.*" autoDrawBackground="true">

<fx:Script>
    <![CDATA[
        import mx.controls.Alert;
        [Bindable]
        [Embed('images/add2.png')]
        public var addIcon:Class;

        [Bindable]
        [Embed('images/delete2.png')]
        public var deleteIcon:Class;

        protected function iconbutton1_clickHandler(event:MouseEvent):void
        {
            Alert.show('test');
        }

    ]]>
</fx:Script>

<s:states>
    <s:State name="normal"/>
    <s:State name="hovered"/>
</s:states>

<s:layout>
    <s:VerticalLayout/>
</s:layout>

<s:transitions>
    <mx:Transition toState="hovered">
        <s:Animate target="{item}" duration="200">
            <s:SimpleMotionPath property="borderWeight" />
        </s:Animate>
    </mx:Transition>
    <mx:Transition fromState="hovered">
        <s:AnimateColor target="{item}" duration="200"/>
    </mx:Transition>
</s:transitions>

<mx:HBox id="item" verticalAlign="middle" width="100%" height="100%"
         useHandCursor="true" buttonMode="true" mouseChildren='false'
         paddingTop="5" paddingBottom="5">
        <s:Label id="subMenuItemName" text="{data.name}"
                 color="#000000" color.hovered="#ff9a15"
                 fontSize="12" fontWeight.hovered="bold"
                 fontFamily="Georgia"/>
        <s:Label text="{'(' + data.result + ')'}"
            id="subMenuItemDescription"
            color="#333333" color.hovered="#ff9a15"
            fontSize="10"/>
    <skins:IconButton
               label="Remove"
               icon="{deleteIcon}"
               skinClass="skins.iconButtonSkin"
               color="#ffffff"
               />
    <skins:IconButton
        label="Add"
        icon="{addIcon}"
        skinClass="skins.iconButtonSkin"
        color="#ffffff"
        click="iconbutton1_clickHandler(event)"
        />
</mx:HBox>

2voto

jeremynealbrown Points 7588

On dirait que vous avez mouseChildren défini sur fase dans votre moteur de rendu d'éléments. En définissant cette propriété à false, vous empêchez la propagation des événements de souris aux enfants d'un conteneur. Essayez de la définir sur true et voyez ce qui se passe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X