Как сделать так, чтобы всплывающее окно всегда отображалось над PopUpButton?С тестовым набором и скриншотом - PullRequest
2 голосов
/ 02 апреля 2012

Немногие пользователи моего веб-приложения Flex 4.6 жалуются на то, что mx.controls.PopUpButton в правом нижнем углу иногда открывает список под и, следовательно, его невозможно использовать (я не могу воспроизвестичто я - возможно, неудачная комбинация их Flash-плеера и / или размера шрифта?)

Как я могу убедиться, что компонент popUp (в моем случае это spark.components.List) всегда открывается выше the PopUpButton?

Я подозреваю, что мне следует создать скин на основе mx.skins.halo.PopUpButtonSkin и назначить его для моего PopUpButton?И мне, вероятно, следует использовать константу PopUpPosition.ABOVE вместе с PopUpAnchor?

Но я не уверен, как ее собрать - может кто-нибудь поделиться некоторыми инструкциями?

Я подготовилскриншот и простой Text.mxml:

enter image description here

<?xml version="1.0" encoding="utf-8"?>
<s:Application 
    xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:mx="library://ns.adobe.com/flex/mx"
    creationComplete="init()">

    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;
            import mx.collections.ArrayCollection;
            import spark.components.List;

            [Bindable]
            private var _data:ArrayCollection = new ArrayCollection();

            [Bindable]
            private var _list:List = new List();

            public function init():void {
                _data.addItem({label: "One"});
                _data.addItem({label: "Tow"});
                _data.addItem({label: "Three"});
                _data.addItem({label: "Four"});
                _data.addItem({label: "Five"});

                _list.dataProvider = _data;
                _list.setStyle('fontSize', 36);
            }
        ]]>
    </fx:Script>

    <mx:PopUpButton right="10" bottom="10" fontSize="24" popUp="{_list}"/>
</s:Application>

ОБНОВЛЕНИЕ:

Я нашел решение от Саймона Бэйли MX ComboBox Open Direction Bug - Альтернативное решение и это вроде работает, но, к сожалению, мешает мне отправлять мое пользовательское событие, когда нажата основная кнопка (не стрелка).

Также япосмотрел на исходный код PopUpButton.as и подумал, может быть, высота списка равна 0, пока он там проверяется:

private function displayPopUp(show:Boolean):void
{
    ......
    // XXX I suspect the _popUp.height below is 0
    // XXX for the users having the trouble

    if (show)
    {          
       if (point.y + _popUp.height > screen.bottom && 
            point.y > (screen.top + height + _popUp.height))
        { 
            // PopUp will go below the bottom of the stage
            // and be clipped. Instead, have it grow up.
            point.y -= (unscaledHeight + _popUp.height + 2*popUpGap);
            initY = -_popUp.height;
        }

Я все еще не могу воспроизвести ошибку самостоятельноМои пользователи не очень полезны (в основном пожилые люди, играющие в мою карточную игру ).Я искал в Adobe JIRA , но не смог найти такую ​​ошибку.

Интересно, есть ли способ замкнуть этот метод, чтобы принудительно открыть всплывающее окно надPopUpButton.

Или, если я должен поместить _list в какой-то контейнер ...

1 Ответ

1 голос
/ 02 апреля 2012

PopUpButton не использует PopUpAnchor.Он устанавливает позицию всплывающего окна внутри закрытой функции с именем displayPopUp().

Почему бы вместо этого не использовать Spark DropDownList?Разве это не то, что вы действительно создали здесь?

...