2011-08-10 24 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; 

    } 
}