flex 4 - 保持元素/组件始终在顶部
Posted
技术标签:
【中文标题】flex 4 - 保持元素/组件始终在顶部【英文标题】:flex 4 - keeping an element/component always on top 【发布时间】:2012-03-18 17:03:54 【问题描述】:我在 flex 4 应用程序中放置了两个自定义组件
<preload:PreLoader horizontalCenter="0" verticalCenter="0" fontWeight="bold" fontSize="50" id="preLoader"/>
<util:Debug top ="0" right="0" id="debug"/>
根据 MXML 中添加的顺序组件,Debug 将保持在最前面。
我的意图是始终将 Debug 组件保持在顶部
PreLoader 组件具有初始化应用程序的所有逻辑,包括一些类的实例化,其中实习生具有向应用程序添加一些其他元素的逻辑(如下所示)
FlexGlobals.topLevelApplication,addElement(someotherflexcomp);
现在,每次我添加一个元素时,flex/AS 的正常行为是新添加的元素将停留在显示列表的顶部。
所以我在主应用程序中编写了一个函数,当组件/元素添加到主应用程序时需要调用它。
public function bringDebuggerFront():void
if (numElements > 2)
swapElementsAt(numElements - 1,numElements - 2);
这里的想法是直截了当的,将最后 Nth(last element) 元素的显示位置与 N-1 个元素交换,如果每次添加元素时都调用该元素,则该元素将成为 Debug 组件。
所以,我需要添加一个额外的行来像这样重新定位调试器寡妇
FlexGlobals.topLevelApplication,addElement(someotherflexcomp);
FlexGlobals.topLevelApplication.bringDebuggerFront();
暂时不是什么大问题,因为目前我在运行时只添加了三个组件,但将来我可能会添加更多,而且更多,我将不得不工作更多(注释或删除分散在多个地方的代码) 禁用此功能,该功能仅用于调试。
为了避免这种情况,我附加了 add 事件侦听器,假设在我向应用程序添加元素时会调用它,但似乎只为我拥有的两个组件调用它在 mxml 中添加,但在使用 addElement() 方法将元素添加到应用程序时不会调用
这是我的主应用程序的完整代码
<?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" minWidth="955" minHeight="600" xmlns:util="util.*" xmlns:preload="preload.*"
add="bringDebuggerFront()">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<preload:PreLoader horizontalCenter="0" verticalCenter="0" fontWeight="bold" fontSize="50" id="preLoader"/>
<util:Debug top ="0" right="0" id="debug"/>
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
public function bringDebuggerFront():void
if (numElements > 2)
swapElementsAt(numElements - 1,numElements - 2);
]]>
</fx:Script>
</s:Application>
我什至也尝试了 added 事件,但我认为这是不正确的,因为它触发了很多次,我假设每次添加内部显示对象都会调用它,并且还会给出错误,我没有深入细节
提前感谢您的帮助
【问题讨论】:
为什么不使用 addElementAt,避免交换? 这也是一个不错的选择,但我需要编写额外的代码来获取 numChildren。我选择 Eduarado 的建议。谢谢 【参考方案1】:如果您使用的是 Flex 4,则可以通过组件的 depth 属性来实现这一点
【讨论】:
太棒了,对于菜鸟来说很难记住几十个属性。我已经设置了深度=“100”,效果很好以上是关于flex 4 - 保持元素/组件始终在顶部的主要内容,如果未能解决你的问题,请参考以下文章