سؤال

أنا أستخدم popupmanager في FB4 لعرض مربع حوار مخصص.

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

من الممكن سحب titlewindow البارز والتركت عندما يقع شريط العنوان الرمادي خارج حدود مستطيل تطبيق Flex ، ثم لا يمكن الاستيلاء على المنبثقة مرة أخرى. من الممكن أيضًا سحب titlewindow لأسفل ، بحيث يصبح غير مرئي تمامًا أسفل الحافة السفلية لمستطيل تطبيق Flex. عندما تكون حدود تطبيق Flex أقل من نافذة المتصفح الكامل ، ويعمل المستخدم بسرعة ، فإن هذه الفرص من هذا يحدث. هل هناك إعداد بسيط من شأنه أن يمنع حدوث ذلك ، أو هل يجب على المبرمج اعتراض السلوك أثناء عملية السحب؟

شكرا تيم

هل كانت مفيدة؟

المحلول

مهلا ، لا يوجد إعداد بسيط لمنع حدوث ذلك من معرفتي. كل ما عليك فعله هو مشاهدته في كل مرة يتحرك فيها والتأكد من بقائها ضمن حدود معينة. يمكنك بعد ذلك تجريد معالج الحدث هذا في بعض فئة وحدة التحكم إذا كنت ترغب في ذلك.

هذا مثال أساسي:

<?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>

أتمنى أن يساعد ذلك يا لانس

نصائح أخرى

مجرد إنشاء فئة وتجاوز حدث Move

Package SmartComponants {import spark.components.titlewindow ؛

public class SmartTitleWindow extends TitleWindow
{
    public function SmartTitleWindow()
    {
        super();
    }
        private static const MIN_VISIBLE:int = 50;

        public override function move(x:Number, y:Number):void
        {
            var maxX:Number = stage.stageWidth - MIN_VISIBLE;
            var maxY:Number = stage.stageHeight - MIN_VISIBLE;

            if (x < 0)
                x = 0;
            else if (x > maxX)
                x = maxX;

            if (y < 0)
                y = 0;
            else if (y > maxY)
                y = maxY;

            super.move(x, y);
        }
    }

}

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top