4

我已经为 DropDownList (即修改了 default spark.skins.spark.DropDownListSkinspark.skins.spark.DropDownListButtonSkin及其按钮“创建”了一个自定义皮肤。

除了让下拉列表与按钮右侧对齐之外,我几乎可以让它做我想做的所有事情。在按钮子皮肤中设置<s:PopUpAnchor popUpWidthMatchesAnchorWidth=*false* />允许列表由项目的宽度决定,因为显然按钮/整个控件的宽度远远小于要求。

这是现在的样子(默认 popUpPosition="bottom")

弹出位置=

设置 popUpPosition="right"

弹出位置=

这是我希望它看起来的样子

想象的

所以在这一点上,我要么需要深入研究 DropDownList 的所有 spark 源代码,以更好地了解事情是如何工作的,要么这里有人已经知道如何做到这一点。

任何想法,将不胜感激。

4

3 回答 3

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按照你要求的行为。

也许有一种更理智的方法可以做到这一点,但我宁愿花时间不去找出那是什么。

于 2012-02-17T04:46:48.917 回答
1

PopUpAnchor 有一个名为 layoutDirection 的属性。我相信这就是你要找的。如果将该属性设置为“rtl”,则下拉菜单将根据需要对齐。

于 2014-08-04T18:50:44.833 回答
0

尽量在你popUpPositionPopUpAnchor皮肤上调整popUpWidthMatchesAnchorWidth。它可以接受leftright重视。更多细节在这里

于 2011-06-15T08:30:11.083 回答