我有一个Spark.List
的自定义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">
<s:states>
<s:State name="normal"/>
<s:State name="selected"/>
<s:State name="hovered"/>
</s:states>
<s:CheckBox label="{data.name}" selected.selected="true" selected.normal="false"/>
</s:ItemRenderer>
清单:
private function get UOAbilitate():List
{
var l:List = new List();
l.dataProvider = listaUOA;
l.allowMultipleSelection = true;
l.itemRenderer = new ClassFactory(CheckBoxItemRenderer);
return l;
}
[Bindable]private var listaUOA:ArrayCollection = new ArrayCollection([
{name: "Uo1"},
{name: "Uo2"},
{name: "Uo3"},
{name: "Uo4"},
{name: "Uo5"},
{name: "Uo6"},
{name: "Uo7"},
{name: "Uo8"},
{name: "Uo9"},
{name: "Uo10"},
{name: "Uo11"},
{name: "Uo12"}
]);
复选框的行为方式正确。 如果我选择了一个值,那么选择另一个值将导致选择新值并取消选择旧值..
使用CTRL两个项目保持选中状态..我将获得相同的结果,而无需按ctrl键...
答案 0 :(得分:2)
最简单的方法是创建List的子类,如下所示:
public class MyList extends List {
public function MyList() {
allowMultipleSelection = true;
}
override protected function item_mouseDownHandler(event:MouseEvent):void {
event.ctrlKey = true;
super.item_mouseDownHandler(event);
}
}
默认情况下我们将allowMultipleSelection
设置为true
(List组件的默认值为false
),我们拦截了MouseEvent.MOUSE_DOWN,这样我们就可以欺骗List了总是按下CTRL键。
如果您正在寻找DataGrid类的类似行为,请阅读以下答案:SelectItem Method in spark Datagrid?
注意:对于CheckBoxes的情况列表,我创建了一个名为CheckBoxGroup的可重用自定义组件来执行此操作,并且默认情况下也会分配CheckBoxItemRenderer。这样我就不必一遍又一遍地这样做。 (它还做了一些其他自定义的东西,比如一次选择所有的方框,但这不是主题)。
答案 1 :(得分:0)
上述解决方案有效,但有一点错误!正确的代码是:
public class MyList extends List {
public function MyList() {
allowMultipleSelection = true;
}
override protected function handleCellRendererClick(event:MouseEvent):void {
event.ctrlKey = true;
super.handleCellRendererClick(event);
}
}