简短版本:ComboBox的下拉列表可在全屏显示之前正常显示,但不会在期间或之后呈现。
我不完全确定如何问这个,所以我实际上用a page demonstrating the error做了一个非常简单的Flex应用程序,以及你需要自己解决问题的所有三个方向。
对于那些不敢大胆遵循上述链接的人,我会尽力在此解释。我已经构建了一个相当广泛的Flex应用程序(不是链接中的那个),它有一些图形和图表以及这些图表的复选框和其他控件。在一些应用程序状态的应用程序底部,有ComboBox
(如HTML中的<select>
标记)。因为它位于最底层,当您单击它以访问它的下拉菜单时,Flex会认真地将它从顶部出来。
这在全屏模式下运行良好。进入全屏后,我使用stage.scaleMode = StageScaleMode.SHOW_ALL
扩展所有内容。现在,当您点击ComboBox
时,下拉列表非常大,实际上落在ComboBox
之下,导致它大部分消失在屏幕外。最好的部分是,一旦退出全屏模式,下拉列表仍然会继续低于位于应用底部的ComboBox
,因此继续被切断。有没有其他人遇到这只野兽,盯着它看起来很棒,并且胜利了?
您可以从链接中的View Source获取代码,非常感谢您的时间。
答案 0 :(得分:1)
我对问题的一小部分有一个解决方法,还有一些关于为什么问题的其他部分正在发生的细节。也许其他人可以弄明白其余的。
首先,一般性说明
Flex 3.5 ComboBox使用以下布尔表达式(第1572-73行)来确定是否应将其下拉列表转换为drop up 列表:
point.y + _dropdown.height > screen.bottom &&
point.y > screen.top + _dropdown.height
其中point.y是ComboBox底部的全局坐标。基本上,“如果它会打到底部,而不会击中顶部,那么......”。否则,如果它也会打到顶部,那么它默认回到扔东西正如我们在手边的案例中看到的那样。考虑到这一点......
部分解决方法
当退出全屏模式时,我可以通过将以下代码添加到toggleFullscreen()
按钮处理程序退出全屏模式,将应用程序恢复为正常功能:
...
screen.height = height;
screen.width = width;
myComboBox.dropdown.invalidateSize(); // myComboBox being the id for the ComboBox
}
解释:发生的一件事(可能是其他因素的影响)是screen
中systemManager
属性的值未正确重置。因此,当评估上面的布尔语句时,它仍然使用全屏值,因此不断将列表放在地板上。此代码只是手动重置屏幕并重新计算下拉列表的大小。
它并不多,但至少它是一些东西。否则...
全屏问题的一些细节
我发现这里有两个问题:
point.y
和_dropdown.height
是未缩放的,而screen.bottom
是缩放的(相对)。因此,表达式的第一部分总是出错,因此ComboBox继续向下渲染列表,即使实际上没有空间。我不知道为什么会发生这种情况,但事实确实如此。我试图间接操纵这些价值而没有不良后果,但我也有一种感觉,即使我得到了正确评价的表达,它也无法解决另一个问题...... 就我而言。我并不完全相信使用变换的解决方案不会去任何地方,但如果编写自己的自定义dropDownFactory
将解决问题,我至少会说我很确定它会是不那么乏味。
答案 1 :(得分:0)
我在CB的下拉列表中遇到了一些问题,看起来有点无关,但是我必须直接将更改应用到下拉列表myCombo.drowpdown.[insert whatever property]
,因为它没有将对组合框所做的更改应用于下拉列表。也许你可以在你的应用程序中尝试,看看它是否有帮助。