2010-02-03 66 views

回答

2

感谢迄今答案。我最终想出了一些不同的东西,并认为我也会分享它。我选择这种解决方案的主要原因是因为我实际上是在响应外部事件,因为我使用custom context menu库来捕获JavaScript中的右键单击。当右击发生时,用户可能不一定在移动鼠标。我可以随时跟踪哪个项目的指针结束,但我认为这会变得复杂。总之我的解决方案的子类名单的工作,像一些事情:

package components{ 
    import mx.controls.List 
    use namespace mx_internal 

    public class MyList extends List{ 

     public function findItemIndexForMouse(stageX:Number, stageY:Number):Number{ 
      var item 
      var pt:Point = new Point(stageX, stageY) 
      pt = listContent.globalToLocal(pt) 
      var rc:int = listItems.length 
      for (var i:int = 0; i < rc; i++) 
      { 
       if (rowInfo[i].y <= pt.y && pt.y < rowInfo[i].y + rowInfo[i].height) 
       { 
        item = listItems[i][0] 
        break 
       } 
      } 
      return itemRendererToIndex(item) 
     } 
    } 
} 

现在你可以调用list.findItemIndexForMouse()来获取给定的鼠标的舞台坐标的项目的索引。确保使用mx_internal命名空间,否则您将无法访问某些必需的实例变量。对于TileList你必须做同样的事情,除了方法看起来有点不同:

public function findItemIndexForMouse(stageX:Number, stageY:Number):Number{ 
    var item 
    var pt:Point = new Point(stageX, stageY) 
    pt = listContent.globalToLocal(pt) 
    var rc:int = listItems.length; 
    for (var i:int = 0; i < rc; i++) 
    { 
     if (rowInfo[i].y <= pt.y && pt.y < rowInfo[i].y + rowInfo[i].height) 
     { 
      var cc:int = listItems[i].length; 
      for (var j:int = 0; j < cc; j++) 
      { 
       if (listItems[i][j] && listItems[i][j].x <= pt.x 
        && pt.x < listItems[i][j].x + listItems[i][j].width) 
       { 
        item = listItems[i][j]; 
        if (!DisplayObject(item).visible) 
         item = null; 
        break; 
       } 
      } 
      break; 
     } 
    } 
    return itemRendererToIndex(item) 

} 
4

事件侦听器添加到每个项目在列表中的鼠标悬停然后在功能这将是event.currentTarget

2

没有在列表中的一个简单的方法/ TileList中的Flex 3的做到这一点:

<mx:TileList id="tileList" itemRollOver="{trace('found item ' + event.itemRenderer)}"/>

ListEvent.ITEM_ROLL_OVER有一堆有用的特性太:

  • event.itemRenderer
  • event.rowIndex
  • event.columnIndex

通过event.itemRenderer.data你可以得到翻身的数据,并从那里将selectedIndex与tileList.dataProvider.getItemIndex(event.itemRenderer.data)

相关问题