как сохранить перетащенный TitleWindow в границе приложения Flex

Я использую PopupManager в FB4 для отображения пользовательского диалогового окна.

    popwin = new TitleWindow(); 
    popwin.addElement(myCustomDialog);
    PopUpManager.addPopUp(popwin,this,false);
    PopUpManager.centerPopUp(popwin);

Возможно перетащить открытый TitleWindow и отпустить его, когда его серая строка заголовка находится вне границ прямоугольника приложения Flex, и затем всплывающее окно не может быть захвачено снова. Также возможно перетащить TitleWindow вниз, таким образом, это становится абсолютно невидимым ниже базового края прямоугольника приложения Flex. Когда границы приложения Flex являются меньше, чем полное окно браузера, и пользователь работает быстро, это случается этого происходящего увеличения. Существует ли простая установка, которая помешает этому происходить, или программист должен прервать поведение во время операции перетаскивания?

Спасибо Tim

9
задан Tim 7 March 2010 в 20:31
поделиться

1 ответ

Эй, насколько мне известно, нет простой настройки, чтобы предотвратить это. Все, что вам нужно сделать, это наблюдать за ним каждый раз, когда он движется, и следить за тем, чтобы он оставался в определенных пределах. Затем вы можете абстрагировать этот обработчик событий в некоторый класс контроллера, если хотите.

Вот простой пример:

<?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="creationCompleteHandler()">

    <fx:Script>
        <![CDATA[
            import flash.geom.Rectangle;
            import mx.core.FlexGlobals;
            import mx.core.UIComponent;
            import mx.events.MoveEvent;
            import mx.managers.PopUpManager;
            import spark.components.TitleWindow;

            protected function creationCompleteHandler():void
            {
                var window:TitleWindow = new TitleWindow();
                PopUpManager.addPopUp(window, this, false);
                PopUpManager.centerPopUp(window);
                window.addEventListener(MoveEvent.MOVE, window_moveHandler);
            }

            protected function window_moveHandler(event:MoveEvent):void
            {
                var window:UIComponent = event.currentTarget as UIComponent;
                var application:UIComponent = FlexGlobals.topLevelApplication as UIComponent;
                var bounds:Rectangle = new Rectangle(0, 0, application.width, application.height);
                var windowBounds:Rectangle = window.getBounds(application);
                var x:Number;
                var y:Number;
                if (windowBounds.left <= bounds.left)
                    x = bounds.left;
                else if (windowBounds.right >= bounds.right)
                    x = bounds.right - window.width;
                else
                    x = window.x;
                if (windowBounds.top <= bounds.top)
                    y = bounds.top;
                else if (windowBounds.bottom >= bounds.bottom)
                    y = bounds.bottom - window.height;
                else
                    y = window.y;
                window.move(x, y);
            }

        ]]>
    </fx:Script>

</s:Application>

Надеюсь, это поможет, Лэнс

8
ответ дан 4 December 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: