segunda-feira, 23 de novembro de 2009

Style backgroundColor não funciona com styleFunction no AdvancedDataGrid

Uma coisa que me chamou a atenção quando criei o componente DateChooserCustom é que em algumas classes / interfaces backgroundColor aparece como propriedade e não como estilo. As classes / interfaces onde isto acontece são: flash.text.TextField, mx.core.IUITextField, mx.preloaders.DownloadProgressBar e mx.preloaders.IPreloaderDisplay. Inclusive as duas primeiras possuem além disso uma propriedade background (Boolean) que indica se haverá preenchimendo do background.

Precisei nestes dias utilizar styleFunction no AdvancedDataGrid retornando um backgroundColor. Para quem não sabe
styleFunction é uma função que deve retornar um object com estilos como propriedade para ser utilizada na renderização das células. Para minha surpresa este estilo não estava sendo aplicado enquanto que outros sim. Investigando aqui e ali descobri uma entrada no Adobe Bug System relatando a mesma situação (necessita login para visualizar), onde postei um workaround.
Dica: Quem quiser votem, porque quanto mais votos maior a possibilidade do Flex Team darem uma olhada.

O que acontece é o seguinte, o
itemRenderer default é um AdvancedDataGridItemRenderer que extende UITextField que implementa IUITextField que como comentado acima tem backgroundColor como propriedade.
Os estilos são aplicados na função protected
applyUserStylesForItemRenderer, esta verifica se existe um styleFunction para o grid e para coluna e os aplica, nesta ordem, o que significa que o da coluna terá prevalência se o grid e a coluna aplicarem o mesmo style.

Devido o código desta função o workaround não ficou dos mais elegantes, mas o que fiz foi sobreescrever esta função e verificar se o style é
backgroundColor, se for coloco true na propriedade background e na propriedade backgroundColor aplico a cor recebida sendo que esta verificação deve ser aplicada no teste do styleFunction do grid e da coluna.

Uma alternativa mais elegante seria criar um item renderer customizado que herde de
AdvancedDataGridItemRenderer e criar neste um style substituto ao backgroundColor.

Nenhum comentário:

Postar um comentário