我想弄清楚如何在我的Air应用程序中打开一个弹出窗口,在辅助窗口中,而不是主应用程序窗口。
我正在使用ReusableFX组件,其中包括具有过滤和其他功能的自定义DataGrid。当您单击网格中列的顶部时,过滤功能会通过PopUpManager显示弹出窗口。
PopUpManager.addPopUp(this, FlexGlobals.topLevelApplication as DisplayObject);
问题是弹出窗口在主应用程序中打开 - 我假设是因为'topLevelApplication'引用。
所以,我需要一种方法在当前的Air:s:Window中打开这个窗口。
我假设我需要一种方法走路:this.parent.parent或this.owner.owner - 虽然我已经尝试过但它似乎没有用(它说空引用)。
或者,有没有办法获得当前最顶层的窗口/组件(不是主应用程序/窗口)?
更新: 我决定为组件创建一个新项目,并添加到Air库中。现在我可以访问“NativeApplication.nativeApplication.activeWindow”调用。这给了我正确的Air窗口。但是,它似乎没有起作用:
PopUpManager.addPopUp(this, NativeApplication.nativeApplication.activeWindow as DisplayObject);
我的弹出窗口没有出现。我假设因为“activeWindow”实际上不是DisplayObject? (那么如果是这种情况,我如何获得DisplayObject?)
更新: 可能是我是this adobe bug?(found here originally)
的受害者答案 0 :(得分:0)
好吧,我想出了一些似乎有用的改动,虽然可能有一个更清洁的方法来做到这一点 - 我只是无法想办法获得对当前空中应用程序窗口的引用,除了这种方式(顺便说一下,这是使用ReuableFX自定义flex组件):
首先,在我的自定义DataGridColumn组件中,我添加了一个公共属性
public var pApp:Object;
接下来,我在调用dropDown.startEdit(column)之前修改了DropDownFilterHeaderRenderer(扩展HBox,实现了IListItemRenderer),showFilterDropDown方法; ,补充道:
column.pApp = parentApplication;
最后,我修改了DropDownFilterEditor(它扩展了FilterEditorBase),方法startEdit(column:MDataGridColumn)(前一个PopUpManager调用的是FlexGlobals.topLevelApplication,它在打开时不是正确的窗口:Air原生应用程序中的Window:< / p>
var editorInstance:Object = _editor.parent;
var columnInstance:Object = editorInstance.column;
var parAppInstance:Object = columnInstance.pApp;
PopUpManager.addPopUp(this, parAppInstance as DisplayObject);