2011-08-10 5 views

답변

2

커스텀 아이템 렌더러를 사용하는 것,이 일을하는 가장 강력한 방법의 OnUpdateDisplay 기능을 재정의하는 경우, 당신이 그래픽 객체를 사용 그릴 부울 매개 변수를 기반으로 데이터 격자 항목의 레이블 사이의 가로 선.

원한다면 라벨에 이와 같은 것을 적어도되지만 Datagrid 아이템 구성 요소로 작동하도록 내부 구조를 파악해야합니다.

레이블에 대한 예를 붙여 넣으려면 알려주십시오.

EDIT (붙여 넣기 예)

는, 새로운 플렉스 프로젝트를 만들고 클래스의 label.The 이름을 확장하는 새 클래스를 추가 지금과 같은 기본 패키지에이 .Put StrikeThroughLabel (즉,

일단
package 
{ 
    import mx.controls.Label; 

    public class StrikeThroughLabel extends Label 
    { 
     private var isStriked:Boolean = false; 

     public function StrikeThroughLabel() 
     { 
      super(); 
     } 

     public function set striked(aIsStriked:Boolean):void{ 
      isStriked = aIsStriked; 
      this.updateDisplayList(this.width, this.height); 
     } 

     override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{ 
      super.updateDisplayList(unscaledWidth, unscaledHeight); 
      if(isStriked){ 
       graphics.lineStyle(1,0x0000FF,1,false,"normal",null,null,3.0); 
       graphics.lineTo(unscaledWidth,unscaledHeight); 
      }else{ 
       graphics.clear(); 
      } 
     } 
    } 
} 

이 완료 이잖아 빈 패키지 필드)를두고, 당신의 main.mxml에 와서 MXML 위해 다음 코드를 사용합니다

<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="windowedapplication1_creationCompleteHandler(event)" 
         xmlns:local="*"> 
    <local:StrikeThroughLabel id="strikeThrough" text="Hello" x="129" y="128"/> 
    <mx:Script> 
     <![CDATA[ 
      import mx.events.FlexEvent; 


      private var isLabelStriked:Boolean = false; 

      protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void 
      { 
       // TODO Auto-generated method stub 
       //this.strikeThrough.striked = true;  
      } 


      protected function button1_clickHandler(event:MouseEvent):void 
      { 
       // TODO Auto-generated method stub 
       isLabelStriked = !isLabelStriked; 
       this.strikeThrough.striked = isLabelStriked; 
      } 

     ]]> 
    </mx:Script> 
    <mx:Button click="button1_clickHandler(event)" id="myButton" label="Toggle"/> 
</mx:WindowedApplication> 

위의 그림은 버튼과 라벨을 보여줍니다. 버튼을 클릭하면 라벨의 취소 선이 토글됩니다. 현재 파업 - 대진은 대각선이지만 라인을 그리는 로그인으로 약간의 비틀기 만하면 수평 파업이 발생합니다.

+0

물론입니다. 고맙습니다. 미리 감사드립니다. –

+0

안녕하세요. 코드로 답변을 업데이트했습니다. 작동하는지 알고 계십니까? – Neeraj

+0

이번 주에 다른 프로젝트를 마무리하겠습니다. 참으로 작동하여 답변을 수락하는 것 같습니다. 어떤 문제라도 여기에 게시해야합니다. 감사. –

1

이 도움말이나이 도움말 만 본 것이 아니라면 확실하지 않습니다.

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()"> 
<mx:Script> 
    <![CDATA[ 

     import mx.collections.ArrayCollection; 

     [Bindable] 
     private var stepsObjs:ArrayCollection = new ArrayCollection(); 
     private function init():void 
     { 
      stepsObjs.addItem(new CObj(100,100,true)); 
      stepsObjs.addItem(new CObj(700,800,false)); 
     } 

    ]]> 
</mx:Script> 

<mx:DataGrid id="dg" dataProvider="{stepsObjs}" click="{dg.selectedItem.strike = !dg.selectedItem.strike}" editable="false"> 
    <mx:columns> 
     <mx:DataGridColumn> 
      <mx:itemRenderer> 
       <mx:Component> 
        <mx:Canvas width="100%" 
         height="100%" 
         horizontalScrollPolicy="off" 
         verticalScrollPolicy="off"> 
         <mx:Script> 
          <![CDATA[ 
           override public function set data(value:Object) : void { 
            super.data = value; 
           } 
          ]]> 
         </mx:Script> 
         <mx:TextArea text="{data.x}" borderStyle="none" editable="false"/> 
         <mx:HRule strokeColor="red" width="100%" visible="{data.strike}" y="{this.height/2}"/> 
        </mx:Canvas> 
       </mx:Component> 
      </mx:itemRenderer> 
     </mx:DataGridColumn> 
     <mx:DataGridColumn> 
      <mx:itemRenderer> 
       <mx:Component> 
        <mx:Canvas width="100%" 
         height="100%" 
         horizontalScrollPolicy="off" 
         verticalScrollPolicy="off"> 
         <mx:Script> 
          <![CDATA[ 
           override public function set data(value:Object) : void { 
            super.data = value; 
           } 
          ]]> 
         </mx:Script> 
         <mx:TextArea text="{data.y}" borderStyle="none" editable="false"/> 
         <mx:HRule strokeColor="red" width="100%" visible="{data.strike}" y="{this.height/2}"/> 
        </mx:Canvas> 
       </mx:Component> 
      </mx:itemRenderer> 
     </mx:DataGridColumn> 

    </mx:columns> 
</mx:DataGrid> 
</mx:Application> 

CObj 클래스

package 
{ 
    [Bindable] 
    public class CObj 
    { 
     public function CObj(x:Number , y:Number , str:Boolean) 
     { 
      this.x = x; 
      this.y = y; 
      this.strike = str; 

     } 
     public var x:Number; 
     public var y:Number; 
     public var strike:Boolean; 

    } 
}