我希望我的数据网格默认运行,就像用户按住控制键一样。因此,当单击某个项目时,另一个项目它们都是选择的一部分,再次单击它们将从选择中删除它们。
我已经有allowMultipleSelection = true
但我似乎无法找到任何设置来执行此操作。我正在同时处理itemclick事件,但似乎可能有一个易于使用的设置我不知道。
有什么想法吗?
答案 0 :(得分:6)
您还可以扩展DataGrid并覆盖selectItem方法,如下所示:
override protected function selectItem(item:IListItemRenderer, shiftKey:Boolean, ctrlKey:Boolean, transition:Boolean = true):Boolean
{
return super.selectItem(item, shiftKey, true, transition )
}
代码减少,不太可能对可能正在侦听MouseEvent的其他元素产生影响。
答案 1 :(得分:0)
您可以尝试将事件侦听器添加到具有最高优先级的MouseEvents(UP和/或DOWN)的网格中,停止传播,并在原始event.target上重新分配具有相同属性的新MouseEvent,但这次使用ctrlKey =真。
我不确定它是否会导致其他10,000件事情破裂。
答案 2 :(得分:0)
我尝试了Nalandial的想法,但没有运气......无法真正拦截这些事件,但它让我朝着正确的方向前进。在这方面做了很多工作然后发现解决方案比我制作它简单得多。我只需要扩展dataGrid类并覆盖两个函数(mouseDownHandler和mouseClickHandler),然后在那里添加ctrlKey = true
,然后完美地调用函数的其余部分。如果你想实现它,这里是代码:
package com{
import flash.events.MouseEvent;
import mx.controls.DataGrid;
public class ForceCtrlDataGrid extends DataGrid{
public function ForceCtrlDataGrid(){
super();
}
override protected function mouseClickHandler(event:MouseEvent):void{
event.ctrlKey = true;
super.mouseClickHandler(event);
}
override protected function mouseDownHandler(event:MouseEvent):void{
event.ctrlKey = true;
super.mouseDownHandler(event);
}
}
}