2011-08-21 3 views
2

내가 플렉스에 새로 온 사람과 내가 BorderContainermouseOver/mouseDown/mouseUp/etc 추가하기. 사용자 정의 MXML 구성 요소에

<?xml version="1.0" encoding="utf-8"?> 
<s:BorderContainer 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    width="160" height="140" > 

    <s:Image id="_avatar" enableLoadingState="true" 
     x="0" y="0" width="160" height="120" /> 

    <s:Label id="_username" x="0" y="125" 
     fontSize="12" fontWeight="bold" /> 

</s:BorderContainer> 

내가 노력하고있어 기반으로하는 사용자 정의 MXML 컴포넌트를 만든 4.5

플렉스 순수 플래시/AS3 응용 프로그램을 포팅하고 mouseOver로

에/강조 성장 효과를 추가하고 해당 구성 요소에 mouseDown에 효과 "를 누를"로 :

<fx:Script> 
    <![CDATA[ 
     import flash.filters.*; 

     public static const SHADOW:Array = [ new DropShadowFilter(8, 
      80, 0x000000, 0.2, 32, 32, 1, 1, false, false, false) ]; 
     public static const GLOW:Array = [ new GlowFilter(0xFFFF00, 
      0.5, 36, 36, 1, 1, false, false) ]; 

     private var _oldScale:Number; 

     private function mouseOver(event:MouseEvent):void { 
      _oldScale = scaleX; 
      filters = GLOW; 
     } 

     private function mouseDown(event:MouseEvent):void { 
      _oldScale = scaleX; 
      scaleX *= 0.95; 
      scaleY *= 0.95; 
      filters = null; 
     } 

     private function mouseUp(event:MouseEvent):void { 
      scaleX = scaleY = _oldScale; 
    filters = GLOW; 
     } 

     private function mouseOut(event:MouseEvent):void { 
      scaleX = scaleY = _oldScale; 
      filters = SHADOW; 
     } 

불행히도 이러한 메서드는 전혀 호출되지 않습니다. 순수 플래시/AS3 응용 프로그램에서

나는

 addEventListener(MouseEvent.MOUSE_OVER, handleMouseOver); 
     addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown); 
     addEventListener(MouseEvent.MOUSE_UP, handleMouseUp); 
     addEventListener(MouseEvent.MOUSE_OUT, handleMouseOut); 
     addEventListener(MouseEvent.CLICK, handleMouseClick); 

를 호출 할 것입니다 그리고 그것은 잘 작동하지만 여기 플렉스 4.5 나는이 작업을 수행하는 방법을 모르겠어요.

또한 dropShadowVisible = "true" 속성이 있지만 내 용도로 사용할 수 있는지 확실하지 않은 것으로 나타났습니다.

플렉스에서 사용자 지정 구성 요소를 확대/축소 할 수 있는지 잘 모르겠습니까? 아니면 "플렉스 효과"(그러나 어떻게?)를 사용해야하며 disableLayout = "true"을 설정해야합니까? 플렉스 4.5에서 저를 위해 일하고 아래 두 방법 중

+0

컨테이너가 마우스 이벤트를 전달하지 않는다고 확신했습니다. 실제 UI 컨트롤이 필요합니다. 그러나 UI 컨트롤이 이벤트를 버블 링하면; 컨테이너에 리스너를 추가 할 수 있어야합니다. – JeffryHouser

+1

이 경우 이벤트 리스너를 추가 했습니까? 어쨌든 당신이 actionscript를 사용하고 있기 때문에 flex에서도 그렇게 할 수 있습니다. – Mansuro

답변

4

중 하나는 :

<?xml version="1.0" encoding="utf-8"?> 
<s:BorderContainer xmlns:fx="http://ns.adobe.com/mxml/2009" 
xmlns:s="library://ns.adobe.com/flex/spark" 
xmlns:mx="library://ns.adobe.com/flex/mx" 
width="160" height="140" 
mouseOut="handleMouseOut(event)" 
mouseDown="handleMouseDown(event)" 
mouseUp="handleMouseUp(event)" 
mouseOver="handleMouseOver(event)" 
creationComplete="init(event)"> 

<fx:Script> 
    <![CDATA[ 
     import mx.events.FlexEvent; 

     public function init(event:FlexEvent):void { 
       /* 
       addEventListener(MouseEvent.MOUSE_OVER, handleMouseOver); 
       addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown); 
       addEventListener(MouseEvent.MOUSE_UP, handleMouseUp); 
       addEventListener(MouseEvent.MOUSE_OUT, handleMouseOut); 
       addEventListener(MouseEvent.CLICK, handleMouseClick); 
       */ 
     } 

는 Mansuro, 나는 당신에게 대답을 줄 수없는, 감사합니다,하지만 난 yoyur 코멘트를 upvoted했습니다.

관련 문제