如果您自己构建 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 就像一个魅力。