也许我应该进一步限定这个 - 有没有办法指定ComboBox将打开哪个方向而不复制和粘贴整个ComboBox类并删除代码,它确定它将在哪个方向打开...
我是我的具体案例 - 我需要它向上打开 - 永远。
更新:你不能通过继承它来解决这个问题,因为处理开口方向的函数是:
private function displayDropdown(show:Boolean, trigger:Event = null):void
那个坏男孩使用了相当数量的私有变量,我的子类无法访问...
答案 0 :(得分: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就像魅力一样。
答案 1 :(得分:0)
我对此表示怀疑 - 你需要对控件进行子类化(这不是 大不了的事。)
也许你可以搞乱这个房地产,所以它被置于这样一种方式(例如挤在右下角),这种情况自然是强迫的?
答案 2 :(得分:0)
我建议您查看this post。是的,你必须抓住ComboBox代码并对其进行修改,但至少现在你知道修改需要去哪里了。
答案 3 :(得分:0)
你可以设置MaxDropDownHeight,如果你设置得足够大,Windows会自动向上设置方向。
答案 4 :(得分:0)
这让我感到恼火。我上传了一个解决方案,它是一个简单的类,它扩展了PopUpButton并删除了阶段边界检测的逻辑,因为它无论如何都失败了50%。我的代码只允许您简单地指定是否要打开或关闭菜单: