Я использую PopupManager в FB4 для отображения пользовательского диалогового окна.
popwin = new TitleWindow(); popwin.addElement(myCustomDialog); PopUpManager.addPopUp(popwin,this,false); PopUpManager.centerPopUp(popwin);
Возможно перетащить открытый TitleWindow и отпустить его, когда его серая строка заголовка находится вне границ прямоугольника приложения Flex, и затем всплывающее окно не может быть захвачено снова. Также возможно перетащить TitleWindow вниз, таким образом, это становится абсолютно невидимым ниже базового края прямоугольника приложения Flex. Когда границы приложения Flex являются меньше, чем полное окно браузера, и пользователь работает быстро, это случается этого происходящего увеличения. Существует ли простая установка, которая помешает этому происходить, или программист должен прервать поведение во время операции перетаскивания?
Спасибо Tim
Эй, насколько мне известно, нет простой настройки, чтобы предотвратить это. Все, что вам нужно сделать, это наблюдать за ним каждый раз, когда он движется, и следить за тем, чтобы он оставался в определенных пределах. Затем вы можете абстрагировать этот обработчик событий в некоторый класс контроллера, если хотите.
Вот простой пример:
<?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>
Надеюсь, это поможет, Лэнс