【问题标题】:Disable CTRL pression for selection multiple values in list禁用 CTRL 按下以选择列表中的多个值
【发布时间】:2012-06-28 09:51:06
【问题描述】:

我有一个用于 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 键...

【问题讨论】:

    标签: actionscript-3 apache-flex list flex4.5 itemrenderer


    【解决方案1】:

    最简单的方法是创建一个 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。这样我就不必一遍又一遍地这样做。 (它还可以做一些其他的自定义操作,比如一次选择所有的框,但这里不是主题)。

    【讨论】:

      【解决方案2】:

      上述解决方案有效,但有一个小错误!正确的代码是:

      public class MyList extends List {
      
          public function MyList() {
              allowMultipleSelection = true;
          }
      
          override protected function handleCellRendererClick(event:MouseEvent):void {
               event.ctrlKey = true;
              super.handleCellRendererClick(event);
          }
      }
      

      【讨论】:

      • 如果您只是建议对现有答案进行微调或更正;这样做的正确方法是发表评论或对其进行编辑。
      猜你喜欢
      • 2016-08-24
      • 2021-12-14
      • 2018-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多