0

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

我是我的具体情况——我需要它向上打开——总是。

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

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

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

4

5 回答 5

2

如果您自己构建 Menu 对象,您可以通过简单地设置菜单对象的 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 就像一个魅力。

于 2008-11-06T14:42:14.357 回答
0

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

也许你可以把房地产弄乱,所以它被放置在这样一种时尚(例如挤在右下角),自然会强制向上?

于 2008-11-05T18:51:30.780 回答
0

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

于 2008-11-05T19:29:14.870 回答
0

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

于 2009-05-26T13:51:50.870 回答
0

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

http://gist.github.com/505255

于 2010-08-02T20:33:21.020 回答