2011-08-10 65 views

回答

2

最可靠的方法來完成這項工作,是使用自定義項目呈現器,其中重寫OnUpdateDisplay功能,您可以使用一個圖形對象繪製基於布爾參數的數據網格項目標籤之間的水平線。

我可以寫下這樣的一個標籤,如果你想,但你必須弄清楚使其與DataGrid項組件工作的內部。

請讓我知道你是否想讓我粘貼一個標籤的例子。

EDIT(糊化例)

創建一個新的Flex項目,添加它擴展了類的label.The名稱的新類是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

嗨,ive更新了代碼的答案。你可以看看這是否工作? – 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; 

    } 
}