我有一个Spark组合框,当点击打开的下拉图标的某些区域时,它会自动关闭弹出窗口区域。我有一个组合框坐在这个弹出窗口旁边,工作得很完美。
第一个弹出窗口是字体列表。第二个是字体大小列表。
我注意到字体组合框在我用系统字体列表填充时开始出现问题。数组中有900种字体。在此之前,字体列表用10种字体填充。它用10种字体工作得很好。
字体组合框位于标注中,但这似乎并不重要,因为第二个组合框工作正常。
我可以通过点击打开的下拉按钮的中心来重现每次关闭弹出区域的情况。点击按钮中心的上方或下方,效果很好。
如果要我猜是怎么回事的话,那就是项目的数量导致弹出窗口的定位时间比平时长,并且它暂时遮挡了鼠标下的区域,而鼠标事件没有被取消,所以弹出窗口区域立即关闭。我不知道,但我想不出其他的办法,也想不出如何解决这个问题。
应用示例:
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
applicationComplete="windowedapplication1_applicationCompleteHandler(event)">
<fx:Style>
@namespace s "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/mx";
s|Scroller {
skinClass: ClassReference("com.flexcapacitor.skins.MinimalScrollerSkin");
}
</fx:Style>
<fx:Script>
<![CDATA[
import mx.collections.ArrayList;
import mx.events.FlexEvent;
protected function windowedapplication1_applicationCompleteHandler(event:FlexEvent):void
{
var fontList:Array = Font.enumerateFonts(true);
fonts.dataProvider = new ArrayList(fontList);
fontSizes.dataProvider = new ArrayList([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]);
fonts.selectedIndex = fontList.length-1;
fontSizes.selectedIndex = fontSizes.dataProvider.length-1;
}
public function fontLabelFunction(object:Object):String {
if (object is Font) {
return Font(object).fontName;
}
return object as String;
}
]]>
</fx:Script>
<s:HGroup verticalCenter="0" horizontalCenter="0">
<s:ComboBox id="fonts" labelFunction="fontLabelFunction"/>
<s:ComboBox id="fontSizes"/>
</s:HGroup>
</s:WindowedApplication>
使用MinimalScrollerSkin和大型数据集并准确单击下拉箭头区域时,似乎会发生这种情况。
1条答案
按热度按时间70gysomp1#
这看起来像是由MinimalScrollerSkin中的错误引起的。MobileSkin类上有一个名为useMinimumHitArea的属性。MinimalScrollerSkin及其相关类扩展了MobileSkin。默认情况下,此属性设置为true。
该属性的文档说明:
如果未缩放的大小小于四分之一平方英寸,则切换透明、居中的点击区域。物理大小基于应用程序DPI。
在外观中将此属性设置为false修复了此问题。它还修复了轨道命中区域溢出到容器内容中的问题。我必须创建一个VScrollBarTrackSkin来修复此问题,因为设置useMinimumHitArea是唯一绘制轨道的操作。