我为DropDownList“创建”了一个自定义皮肤(即修改了默认的spark.skins.spark.DropDownListSkin
)和spark.skins.spark.DropDownListButtonSkin
的按钮。
我能够让它几乎完成我想要的所有事情,除了获得下拉的列表以对齐按钮的右侧。在按钮子皮肤中设置<s:PopUpAnchor popUpWidthMatchesAnchorWidth=*false* />
允许列表由项目的宽度决定,因为按钮/整个控件的宽度显然远远小于所需的宽度。
以下是现在的样子(默认popUpPosition =“bottom”)
设置popUpPosition =“right”
这就是我想要的样子
所以在这一点上,我要么需要深入研究DropDownList的所有火花源代码,以便更好地理解它是如何工作的,或者这里有人知道如何做到这一点。
任何想法都会受到赞赏。
答案 0 :(得分:4)
您可以创建一个从PopUpAnchor
扩展的自定义PopUpAnchor
类,并覆盖其determinePosition函数以修改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
,其行为符合您的要求。
也许有一种更为理智的做法,但我宁愿花时间不知道那是什么。
答案 1 :(得分:1)
PopUpAnchor有一个名为layoutDirection的属性。我相信这就是你要找的东西。 如果您将该属性设置为&#34; rtl&#34;下拉列表将根据需要对齐。
答案 2 :(得分:0)
除了调整popUpWidthMatchesAnchorWidth
之外,尝试调整皮肤中的popUpPosition
of PopUpAnchor
。它可以接受left
和right
值。更多详情是here。