今天遇到一个很诡异的问题,在某些情况下(并不是总出现),updateDisplayList中buttonBar.measuredWidth总是等于0,导致buttonBar在页面上无法显示,调用buttonBar.validateNow();问题解决。可能是buttonBar的validateSize()方法没有调用。
另外如果不用buttonBar.validateNow();调用buttonBar.setStyle("backgroundColor", 0x00ff00);也可以解决问题。决定把UIComponent源代码读一遍,9000多行...
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
if(!isDragging){
var paddingLeft:Number = getStyle("paddingLeft") > 10? getStyle("paddingLeft") : 10;
var paddingRight:Number = getStyle("paddingRight") > 10? getStyle("paddingRight") : 10;
var headerHeight:Number = getHeaderHeight();
buttonBar.validateNow();
buttonBar.width = buttonBar.measuredWidth;
buttonBar.height = headerHeight;
buttonBar.x = unscaledWidth - paddingRight - buttonBar.width;
buttonBar.y = 0;
titleTextField.width = buttonBar.x - paddingLeft;
titleTextField.toolTip = title;
}
}