Выровняйте раскрывающийся список справа, когда popUpWidthMatchesAnchorWidth имеет значение FALSE - PullRequest
4 голосов
/ 15 июня 2011

Я «создал» собственный скин для DropDownList (т.е. изменил значение по умолчанию spark.skins.spark.DropDownListSkin) и spark.skins.spark.DropDownListButtonSkin для его кнопки.

Мне удалось заставить его выполнять почти все, что я хотел, за исключением того, что список получился выпадающим и выровненным по правому краю кнопки. Установка <s:PopUpAnchor popUpWidthMatchesAnchorWidth=*false* /> во вложенной обложке кнопки позволяет определять список по ширине элементов, поскольку очевидно, что ширина кнопки / всего элемента управления намного меньше, чем требуется.

Вот как это выглядит сейчас (по умолчанию popUpPosition = "bottom")

popUpPosition=

Настройка popUpPosition = "right"

popUpPosition=

Вот как бы я хотел, чтобы это выглядело

Imagined

Итак, на данный момент мне нужно либо покопаться во всем исходном коде искры для DropDownList, чтобы лучше понять, как все работает, либо, возможно, кто-то здесь знает, как это сделать уже.

Любые идеи будут оценены.

Ответы [ 3 ]

4 голосов
/ 17 февраля 2012

Вы можете создать собственный класс PopUpAnchor, который расширяется от PopUpAnchor, и переопределить его функцию definePosition, чтобы изменить поведение 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 голос
/ 04 августа 2014

PopUpAnchor имеет свойство layoutDirection.Я верю, что это то, что вы ищете.Если вы установите для этого свойства значение «rtl», выпадающий список будет выровнен по вашему усмотрению

0 голосов
/ 15 июня 2011

Попробуйте настроить popUpPosition из PopUpAnchor в вашей коже в дополнение к настройке popUpWidthMatchesAnchorWidth. Может принимать значения left и right. Более подробная информация здесь .

...