0

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

我在想: myTree.selectedItem = EVENT.TARGET (其中 EVENT 可能是鼠标悬停/右键单击/滚动事件,而 TARGET 应该是当前鼠标指针下的节点/项目)。

有没有办法做到这一点(或以任何其他方式)?

啊,我想不用左键点击 ;-)

提前谢谢你,塞巴斯蒂安

4

1 回答 1

1

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

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

<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}">

变量和设置/获取方法:

        [Bindable] public var _rollOverSelectedItem:Object;     

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

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

和 ItemRenderer 的翻转方法:

protected function itemrenderer1_rollOverHandler(event:MouseEvent):void
        {

            this.parentApplication.rollOverSelectedItem = data;             

        }

最好/正确的方法是什么?

于 2013-07-23T12:36:51.390 回答