我已经“创建”了 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/

10-16 23:49