代码之家  ›  专栏  ›  技术社区  ›  Chris W. Rea

如何根据绑定的数据提供程序内容的变化来调整Flex 3组合框的宽度?

  •  1
  • Chris W. Rea  · 技术社区  · 17 年前

    在Flex 3中,我在MXML组件中创建了一个组合框,如下所示:

    <mx:ComboBox id="comboBox" dataProvider="{_choices}" />
    
    <mx:Script>
    <![CDATA[
      import mx.collections.ArrayCollection;
      // etc...
      public function get choices():ArrayCollection { return _choices; }
    
      [Bindable]
      private var _choices:ArrayCollection =
        new ArrayCollection( [ { data: "ALL", label: "All" } ] );
      // etc...
    ]]>
    </mx:Script>
    
    </mx:HBox>
    

    myComponentId.choices.removeAll();
    myComponentId.choices.addItem({data: "NY", label: "New York"});
    myComponentId.choices.addItem({data: "CA", label: "California"});
    // etc...
    

    装订 在组合框自动拾取运行时添加的新内容的情况下工作, 然而 它没有调整它的宽度。组合框的初始宽度仅足以显示组件中声明的初始项“All”。然而,我希望并且本应期望组合框在绑定期间自动重新调整大小,以便能够显示“California”,但事实并非如此。

    在向数据提供程序添加新的更宽标签后,如何让组合框更新其宽度?非常感谢。

    3 回复  |  直到 17 年前
        1
  •  2
  •   Sam Martin    17 年前

    你可能只需要打个电话 invalidateProperties() invalidateDisplayList() , invalidateSize()

    myComponentId.invalidateSize();
    myComponentId.invalidateDisplayList();
    myComponentId.invalidateProperties();
    
        2
  •  0
  •   Eric Belair    17 年前

    我会为你添加一个setter choices validateNow() 在setter末尾的组合框上:

    public function set choices(value:ArrayCollection):void
    {
        _choices = value;
    
        comboBox.validateNow();
    }
    
        3
  •  0
  •   Mattieu GA    16 年前

    我遇到了同样的问题,这两个都不适合我。我通过创建一个新的事件处理程序来解决这个问题

    menuComboBox.addEventListener(ResizeEvent.RESIZE, updateListWidth);
    

    此事件中调用的方法只是调整dropdown.width属性的大小。

    private function updateListWidth(event:ResizeEvent):void {
            menuComboBox.dropdown.width = menuComboBox.width;
    }
    
    推荐文章