也许我应该进一步限定这一点 - 有没有办法指定 ComboBox 将打开哪个方向而不复制和粘贴整个 ComboBox 类并撕掉它确定它将在哪个方向打开的代码......
我是我的具体情况——我需要它向上打开——总是。
更新:你不能通过继承它来解决这个问题,因为处理开口方向的函数是:
private function displayDropdown(show:Boolean, trigger:Event = null):void
那个坏男孩使用了大量我的子类无法访问的私有变量......
也许我应该进一步限定这一点 - 有没有办法指定 ComboBox 将打开哪个方向而不复制和粘贴整个 ComboBox 类并撕掉它确定它将在哪个方向打开的代码......
我是我的具体情况——我需要它向上打开——总是。
更新:你不能通过继承它来解决这个问题,因为处理开口方向的函数是:
private function displayDropdown(show:Boolean, trigger:Event = null):void
那个坏男孩使用了大量我的子类无法访问的私有变量......
如果您自己构建 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 就像一个魅力。
我对此表示怀疑-您需要对控件进行子类化(这没什么大不了的。)
也许你可以把房地产弄乱,所以它被放置在这样一种时尚(例如挤在右下角),自然会强制向上?
我建议查看这篇文章。是的,您确实必须获取 ComboBox 代码并对其进行修改,但至少现在您知道需要修改的地方。
你可以设置 MaxDropDownHeight,如果你设置的足够大,Windows 会自动设置向上的方向。
这让我恼火不已。我上传了一个解决方案,它是一个简单的类,它扩展了 PopUpButton 并删除了舞台边界检测的逻辑,因为无论如何它有 50% 的时间都失败了。我的代码只允许您简单地指定是要向上还是向下打开菜单: