【问题标题】:Flex - Is there a way to specify what direction a ComboBox will open?Flex - 有没有办法指定 ComboBox 打开的方向?
【发布时间】:2008-11-05 18:22:03
【问题描述】:

也许我应该进一步限定这一点 - 有没有一种方法可以指定 ComboBox 将打开的方向,而无需复制和粘贴整个 ComboBox 类并撕掉它确定打开方向的代码...

我是我的特殊情况 - 我需要它向上打开 - 总是。

更新:你不能通过继承它来解决这个问题,因为处理开口方向的函数是:

private function displayDropdown(show:Boolean, trigger:Event = null):void

而且那个坏男孩使用了大量我的子类无法访问的私有变量...

【问题讨论】:

    标签: apache-flex actionscript-3 combobox


    【解决方案1】:

    如果您自己构建菜单对象,您可以通过简单地设置菜单对象的 x,y 坐标将菜单放置在您想要的任何位置。您将需要计算这些坐标,但您可能无需子类化 ComboBox 即可轻松完成此操作。

    我正在用 PopUpButton 做类似的事情;您可能会发现使用 PopUpButton 更容易。这是基于我当前项目的真实代码:

    private function initMenu(): void {
        var m:Menu = new Menu();
        m.dataProvider = theMenuData;
        m.addEventListener(MenuEvent.ITEM_CLICK, menuClick);
        m.showRoot = false;
        // m.x = ... <-- probably don't need to tweak this.
        // m.y = ... <-- this is really the interesting one :-)
        theMenu.popUp = m;
    }
    <mx:PopUpButton id="theMenu" creationComplete="initMenu()" ... />
    

    顺便说一句,为了让 PopUpButton 的行为更像我想要的那样(总是弹出,无论在哪里点击),在 MXML 中设置 openAlways=true 就像一个魅力。

    【讨论】:

    • 你才是真正的男人——该组件实际上更适合我的需求。我只是从来没有使用过它!
    【解决方案2】:

    我对此表示怀疑 - 您需要对控件进行子类化(这 没什么大不了的。)

    也许你可以把不动产弄乱,所以它被放置在这样一种方式(例如挤到右下角),这样自然会被强制?

    【讨论】:

      【解决方案3】:

      我建议查看this post。是的,您确实必须获取 ComboBox 代码并对其进行修改,但至少现在您知道需要修改的地方。

      【讨论】:

        【解决方案4】:

        你可以设置 MaxDropDownHeight,如果你设置的足够大,Windows 会自动设置方向向上。

        【讨论】:

          【解决方案5】:

          这让我非常恼火。我上传了一个解决方案,它是一个简单的类,它扩展了 PopUpButton 并删除了舞台边界检测的逻辑,因为无论如何它有 50% 的时间都失败了。我的代码只允许您简单地指定是向上还是向下打开菜单:

          http://gist.github.com/505255

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-03-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多