Apache flex 如何将拖动的标题窗口保持在Flex应用程序边界内
我在FB4中使用PopupManager来显示自定义对话框 popwin = new TitleWindow(); popwin.addElement(myCustomDialog); PopUpManager.addPopUp(popwin,this,false); PopUpManager.centerPopUp(popwin); popwin=新标题窗口(); 添加元素(myCustomDialog); addPopUp(popwin,this,false); 中心弹出窗口(popwin); 当弹出的标题栏的灰色标题栏位于Flex应用程序矩形的边界之外时,可以将其拖动到窗口中并放开,这样就无法再次抓取弹出窗口。也可以向下拖动标题窗口,使其在Flex应用程序矩形底边下方完全不可见。当Flex应用程序的边界小于完整的浏览器窗口,并且用户工作速度很快时,发生这种情况的可能性就会增加。是否有一个简单的设置可以防止这种情况发生,或者程序员必须在拖动操作期间拦截该行为 谢谢Apache flex 如何将拖动的标题窗口保持在Flex应用程序边界内,apache-flex,drag,popupwindow,bounds,Apache Flex,Drag,Popupwindow,Bounds,我在FB4中使用PopupManager来显示自定义对话框 popwin = new TitleWindow(); popwin.addElement(myCustomDialog); PopUpManager.addPopUp(popwin,this,false); PopUpManager.centerPopUp(popwin); popwin=新标题窗口(); 添加元素(myCustomDialog); addPopUp(popwin,this,false); 中
蒂姆嘿,据我所知,没有一个简单的设置可以防止这种情况发生。你所需要做的就是每次观察它的移动,确保它保持在一定的范围内。然后,如果愿意,可以将该事件处理程序抽象到某个控制器类中 以下是一个基本示例:
<?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>
=边界(右)
x=bounds.right-window.width;
其他的
x=窗口x;
if(windowBounds.top=bounds.bottom)
y=bounds.bottom-window.height;
其他的
y=窗口。y;
窗口。移动(x,y);
}
]]>
希望有帮助,
Lance只需创建类并覆盖移动事件 封装智能元件 { 导入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);
}
}
公共类SmartTitleWindow扩展了TitleWindow
{
公共函数SmartTitleWindow()
{
超级();
}
私有静态常量最小值可见:int=50;
公共覆盖功能移动(x:编号,y:编号):无效
{
var maxX:Number=stage.stageWidth-MIN\u可见;
var maxY:Number=stage.stageHeight-MIN\u可见;
if(x<0)
x=0;
else if(x>maxX)
x=最大x;
if(y<0)
y=0;
如果(y>maxY),则为else
y=最大值;
超级移动(x,y);
}
}
}兰斯,谢谢你提供了这个有用的例子。类似的问题发布在这里: