我已经“创建”了 DropDownList 的自定义皮肤(即修改了默认的 spark.skins.spark.DropDownListSkin
)和按钮的 spark.skins.spark.DropDownListButtonSkin
。
我已经能够让它做我想做的几乎所有事情,除了让下拉列表与按钮的右侧对齐。在按钮子皮肤中设置 <s:PopUpAnchor popUpWidthMatchesAnchorWidth=*false* />
允许列表由项目的宽度决定,因为显然按钮/整个控件的宽度远远小于要求。
这是现在的样子(默认 popUpPosition="bottom")
设置 popUpPosition="right"
这是我想要的样子
所以在这一点上,我要么需要深入研究 DropDownList 的所有 spark 源代码以更好地理解事情是如何工作的,要么这里有人已经知道如何做到这一点。
任何想法,将不胜感激。
最佳答案
您可以创建一个从 PopUpAnchor
扩展的自定义 PopUpAnchor
类,并覆盖其确定位置函数以修改 PopUpPosition.BELOW
的行为方式:
override mx_internal function determinePosition(placement:String,
popUpWidth:Number, popUpHeight:Number,matrix:Matrix,
registrationPoint:Point, bounds:Rectangle):void
{
switch(placement)
{
case PopUpPosition.BELOW:
registrationPoint.x = -popUpWidth + unscaledWidth;
registrationPoint.y = unscaledHeight;
break;
case PopUpPosition.ABOVE:
registrationPoint.x = 0;
registrationPoint.y = -popUpHeight;
break;
case PopUpPosition.LEFT:
registrationPoint.x = -popUpWidth;
registrationPoint.y = 0;
break;
case PopUpPosition.RIGHT:
registrationPoint.x = unscaledWidth;
registrationPoint.y = 0;
break;
case PopUpPosition.CENTER:
registrationPoint.x = (unscaledWidth - popUpWidth) / 2;
registrationPoint.y = (unscaledHeight - popUpHeight) / 2;
break;
case PopUpPosition.TOP_LEFT:
// already 0,0
break;
}
}
设置
registrationPoint.x = -popUpWidth + unscaledWidth
使其与按钮的右边缘对齐。在你的
DropDownList
皮肤中,用你新创建的类替换 PopUpAnchor
标签,你应该有一个 DropDownList
,它的行为符合你的要求。也许有一种更明智的方法可以做到这一点,但我宁愿花时间不去弄清楚那是什么。
关于apache-flex - 当 popUpWidthMatchesAnchorWidth 为 FALSE 时,将下拉列表向右对齐,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6354955/