我正在尝试使用PopUpManager解决我在Flex中定位的特定问题。基本上我想要创建一个将与父容器一起滚动的弹出窗口 - 这是必要的,因为父容器很大,如果用户的浏览器窗口不够大(大多数时候都是这种情况) - 他们将不得不使用容器的滚动条向下滚动。问题是弹出窗口是相对于另一个组件定位的,它需要由该组件保留。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.core.UITextField;
import mx.containers.TitleWindow;
import mx.managers.PopUpManager;
private function clickeroo(event:MouseEvent):void {
var popup:TitleWindow = new TitleWindow();
popup.width = 250;
popup.height = 300;
popup.title = "Example";
var tf:UITextField = new UITextField();
tf.wordWrap = true;
tf.width = popup.width - 30;
tf.text = "This window stays put and doesn't scroll when the hbox is scrolled (even with using the hbox as parent in the addPopUp method), I need the popup to be local to the HBox.";
popup.addChild(tf);
PopUpManager.addPopUp(popup, hbox, false);
PopUpManager.centerPopUp(popup);
}
]]>
</mx:Script>
<mx:HBox width="100%" height="2000" id="hbox">
<mx:Button label="Click Me" click="clickeroo(event)"/>
</mx:HBox>
</mx:Application>
有人能给我任何正确方向的指示吗?感谢。
答案 0 :(得分:2)
你正在调用“centerPopup”,这将击败addPopup中的第二个参数。根据Adobe文档,centerPopup“将弹出窗口置于调用createPopUp()或addPopUp()方法的任何窗口中。”
答案 1 :(得分:2)
PopUpManager添加了另一个独立于原始应用程序的层 因此,如果您希望它保持相对于第一层,您可能不想使用PopUpManager。你可以在Canvas上使用TitleWindow。
你可能有这个:
<mx:Application creationComplete="createPopup()">
<mx:Script>
<![CDATA[
public var popupPanel:TitleWindow = new TitleWindow();
private function createPopup():void
{
PopUpManager.addPopUp(popupPanel, myApp, true);
PopUpManager.centerPopUp(popupPanel);
}
]]>
</mx:Script>
<mx:Canvas id="myApp" width="100%" height="2000" />
</mx:Application>
但相反,你会想尝试这样的事情:
<mx:Application creationComplete="createPopup()">
<mx:Script>
<![CDATA[
public var popupPanel:TitleWindow = new TitleWindow();
private function createPopup():void
{
// Assuming MyApplication extends Canvas
(myApp as Canvas).addChild(popupPanel);
popupPanel.x = myApp.width/2;
popupPanel.y = myApp.height/2;
}
]]>
</mx:Script>
<mx:Canvas id="myApp" width="100%" height="2000" />
</mx:Application>
您需要自己决定应用程序的最佳x,y值。
如果你还想使这个TitleWindow可拖动/可移动,那么你可以使用Sprite.startDrag()函数。
请告诉我这是否有帮助!
答案 2 :(得分:0)
在Google中搜索相同问题时发现此帖子。我在另一个网站上找到了两个解决方他们在这里:
在第一个解决方案中......添加了一个监听器来响应 滚动事件的VBox,重新定位弹出窗口和另外 检测弹出窗口移出VBox边界的时间,切换 它的可见性让它看起来像“掖在VBox之下” 产卵父母滚出视野。
第二种解决方案更清洁:
基本上,我在我的VBox和“addChild”弹出窗口上覆盖了一个画布 画布的组件(不使用popupmanager)并滚动 画布和VBox一起。设置弹出窗口的isPopup属性 组件允许我像你一样拖动组件 弹出窗口。