Я строю графический компонент в MXML с различными состояниями, каждый из которых имеет свой собственный размер.
Вы неправильно понимаете, как работает архитектура компонентов Flex.Компонент никогда не измеряет себя.Это всегда до родителей, чтобы измерить это дети.Вы можете переопределить метод меры, чтобы установить measureWidth и measureHeight;однако это только предложения, предоставленные родителю компонента.Компонент сам решает, принимать их или нет.
Итак, в вашем примере вы можете изменить высоту / ширину кнопки (дочерний элемент);но вы не можете изменить высоту / ширину холста (компонент, который вы расширяете) и ожидать его прилипания.
Не видя код, содержащий этот компонент холста, трудно точно сказать, что происходитна.Но, в этом случае, вы должны переопределить метод меры, чтобы изменить измеренную ширину / измеренную высоту.Примерно так:
override protected measure():void{
if(currentState=='Normal'){
measuredWidth = 0;
measuredHeight = 0;
} else {
measuredWidth = button.width;
measuredHeight = button.height;
}
}
Когда состояние меняется, обязательно вызовите метод invalidateSize ().Вы можете сделать это, прослушивая событие currentStateChange .
Теоретически, это приведет к изменению компонента measureWWWW / measureHeight;который заставит родителя также перерисовать себя, приспосабливаясь к новому measureWidth / measureHeight.
MXML маскирует многие из этих деталей.