Как создать пользовательский компонент MXML во flex, который основан на существующем компоненте, но в определенных ситуациях наложит поверх этого существующего компонента.
В идеале, новый компонент должен основываться (выходить из) существующего компонента, чтобы вхождения существующего компонента можно было просто заменить новым.
Я попытался переопределить updateDisplayList () в новом компоненте и нарисовать наложение, используя this.graphics. Это привело к тому, что наложение было нарисовано под дочерними элементами существующего компонента. Я также попытался сделать рисунок после получения события рендеринга, которое привело к аналогичным результатам.
Когда внешнее условие, которое должно вызвать отображение наложения, изменяется, я вызываю invalidateDisplayList () в моем новом компоненте. Это работает, чтобы вызвать рисование для обоих случаев, описанных выше. Похоже, остающаяся проблема состоит в том, чтобы выяснить, как рисовать поверх всех других компонентов после их добавления.
Следующий пример должен иллюстрировать то, что я пытался сделать; когда overlayEnabled был установлен и был вызван метод invalidateDisplayList () компонента, красный прямоугольник окрашивался в фоновом режиме ....
// NewComponent.mxml
<ExistingComponent ...>
<mx:Script>
...
public var overlayEnabled:Boolean;
override protected updateDisplayList(...) {
super.updateDisplayList(...)
if (overlayEnabled) {
var g:Graphics = this.graphics;
g.beginFill(0xFF0000, 0.5);
g.drawRect(0, 0, width, height);
g.endFill();
}
}
...
</mx:Script>
</ExistingComponent>
Кроме того, не стесняйтесь предлагать различные подходы.