2012-06-28 2 views
1

У меня есть обычай ItemRenderer для Spark.ListОтключить CTRL прижимного для нескольких значений выбора в списке

<?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 ...

ответ

2

Самый простой способ сделать это, чтобы создать подкласс списка, как это:

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?

Примечание: для списка флажков ситуации, я создал повторно используемый компонент, названный CheckBoxGroup, который делает это и также назначает CheckBoxItemRenderer по умолчанию. Таким образом, мне не нужно делать это снова и снова. (Он также выполняет некоторые другие пользовательские вещи, такие как выбор всех ящиков одновременно, но это не в тему).

0

Вышеупомянутое решение сработало, но есть небольшая ошибка! Правильный код:

public class MyList extends List { 

    public function MyList() { 
     allowMultipleSelection = true; 
    } 

    override protected function handleCellRendererClick(event:MouseEvent):void { 
     event.ctrlKey = true; 
     super.handleCellRendererClick(event); 
    } 
} 
+2

Если вы предлагаете незначительную настройку или исправление существующего ответа; правильный способ сделать это - либо оставить комментарий, либо сделать его редактирование. –

Смежные вопросы