如何以编程方式将“鼠标悬停”项目放入树/列表中的选定项目?

时间:2013-07-23 08:45:11

标签: flex actionscript tree focus

我想以编程方式将树或列表中的选定项目更改为鼠标指针下当前“标记/聚焦”的项目。 我正在使用Flex Air独立应用程序。

我在思考: myTree.selectedItem = EVENT.TARGET(其中EVENT可能是mouseover / rightclick / rollOver事件,TARGET应该是当前鼠标指针下的节点/项目。)

有没有办法(或以任何其他方式)?

啊,我想在不点击的情况下这样做; - )

提前谢谢你, 塞巴斯蒂安

1 个答案:

答案 0 :(得分:1)

我发现这很有趣,所以我想问这是否是实现这一目标的最简单方法。首先,您需要将rollOver-listener添加到ItemRenderer而不是列表本身(因为event.target和event.currentTarget将只显示您的列表),而不是列表。

因此,我们创建一个自定义ItemRenderer并添加一个rollOver监听器

<xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" 
            xmlns:mx="library://ns.adobe.com/flex/mx" 
            autoDrawBackground="true" height="20" rollOver="itemrenderer1_rollOverHandler(event)">
<fx:Script>
    <![CDATA[

        protected function itemrenderer1_rollOverHandler(event:MouseEvent):void
        {
            this.dispatchEvent(new CustomEvent(CustomEvent.SELECT_ITEM, data, true));

        }

    ]]>

    <s:Label id="label1" text="{data.label}"/>

</s:ItemRenderer>

您需要以某种方式获取所选项目的值(这是itemRenderer上的数据),所以我创建了一个CustomEvent类来执行此操作。

package
{
    import flash.events.Event;

    public class CustomEvent extends Event
    {

        public var selectedItem:Object;

        public static const SELECT_ITEM:String = "selectItem";


         public function CustomEvent(type:String, selectedItem:Object, bubbles:Boolean=false, cancelable:Boolean=false)
         {
            super(type, bubbles, cancelable);
            this.selectedItem = selectedItem;
         }
    }
}

然后我在主类中添加了一个eventListener并相应地设置了list.selectedItem属性:

//for the main MXML initializer: 
    this.addEventListener(CustomEvent.SELECT_ITEM, rollOverChangeSelected);


            //and the function:
    protected function rollOverChangeSelected(ce:CustomEvent):void{


            list.selectedItem = ce.selectedItem;

    }

另一种方式:可绑定变量 清单:

s:List id="list" allowMultipleSelection="true"  selectionColor="red" rollOverColor="red" itemRenderer="customItemRenderer" selectedItem="{_rollOverSelectedItem}">

变量和set / get方法:

        [Bindable] public var _rollOverSelectedItem:Object;     

        public function get rollOverSelectedItem():Object
        {
            return _rollOverSelectedItem;
        }

        public function set rollOverSelectedItem(value:Object):void
        {
            _rollOverSelectedItem = value;
        }

和ItemRenderer的rollOver-method:

protected function itemrenderer1_rollOverHandler(event:MouseEvent):void
        {

            this.parentApplication.rollOverSelectedItem = data;             

        }

最佳/正确的方式是什么?