我想以编程方式将树或列表中的选定项目更改为鼠标指针下当前“标记/聚焦”的项目。我正在使用 Flex Air 独立应用程序。
我在想: myTree.selectedItem = EVENT.TARGET (其中 EVENT 可能是鼠标悬停/右键单击/滚动事件,而 TARGET 应该是当前鼠标指针下的节点/项目)。
有没有办法做到这一点(或以任何其他方式)?
啊,我想不用左键点击 ;-)
提前谢谢你,塞巴斯蒂安
我想以编程方式将树或列表中的选定项目更改为鼠标指针下当前“标记/聚焦”的项目。我正在使用 Flex Air 独立应用程序。
我在想: myTree.selectedItem = EVENT.TARGET (其中 EVENT 可能是鼠标悬停/右键单击/滚动事件,而 TARGET 应该是当前鼠标指针下的节点/项目)。
有没有办法做到这一点(或以任何其他方式)?
啊,我想不用左键点击 ;-)
提前谢谢你,塞巴斯蒂安
我发现这很有趣,所以我问这是否是实现这一目标的最简单方法。首先,您需要将 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;
}
最好/正确的方法是什么?