Flex:removedEffect在更改父级时导致错误

时间:2010-02-16 20:24:00

标签: flex flex3 air

好的我有一个TitleWindow的子类用这个方法:

public function launchInNewWindow(e:Event):void
{
    this.parent.removeChild(this);
    ownWindow = new Window();
    ownWindow.systemChrome = 'none';
    ownWindow.type = NativeWindowType.LIGHTWEIGHT;
    ownWindow.transparent = true;
    ownWindow.setStyle('showFlexChrome', false);
    ownWindow.width = this.width > 750 ? 750 : this.width;
    ownWindow.height = this.height > 550 ? 550 : this.height;
    edit.enabled = false;
    ownWindow.addChild(this);
    ownWindow.width += 5; //add to show dropshadow
    ownWindow.height += 10; //add to show dropshadow
    ownWindow.open();
    _inOwnWindow = true;
    ownWindow.nativeWindow.x = Application.application.nativeWindow.x + this.x + 5; //keep in same spot add 5 for systemChrom border
    ownWindow.nativeWindow.y = Application.application.nativeWindow.y + this.y + 30;//keep in same spot add 30 for systemChrom title
}

这样做是通过创建一个新的Window对象并将其自身添加到新Window的displayList来使标题窗口成为自己的Window(NativeWindow)。

它的效果非常好,但是如果我在这个类的实例上设置了removedEffect,则在尝试将自身添加到Window的displayList时会产生错误。

我尝试添加:

this.setStyle('removedEffect',null);

this.setStyle('removedEffect',new TitleWindow().getStyle('removedEffect'));

尝试删除任何removeEffect设置在自己之前,但没有运气。

但如果组件上没有removeEffect,它可以正常工作。必须有办法解决这个问题。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

要使removedEffect工作,窗口需要在原始父级上,但是您会立即尝试将其添加到新父级,并且它不能同时属于两个父级。我可以想到几个选项。

  1. 获取要删除的窗口的位图,显示在同一位置,在此位图副本上运行所需的效果,然后您可以在不受效果干扰的情况下重新生成原始图像。< / p>

  2. 将删除和重新父项的代码分为两个步骤。首先删除窗口。然后当removedEffect完成后,将其添加到新窗口的显示列表中。