Pergunta

Para considerações de tempo de carregamento estou usando um arquivo css tempo de execução no meu aplicativo Flex.

Eu estou tendo um problema com um controle de múltiplas linha de texto:

<mx:Text id="txtDescription" selectable="false"
styleName="imageRolloverButtonTextDark" width="100%" textAlign="center"
text="{_rolloverText}"/>

Quando a minha folha de estilos CSS tem carregado o estilo de texto corretamente muda, mas a altura não é recalculada. Parece ser apenas um campo de linha única.

FYI: O controle não é realmente visível, e acionado por um capotamento. Então, eu realmente não se importam se o hasnt estilo carregado e eles ficam de texto do sistema padrão. I jsut quer que seja a altura correta quando ele foi carregado.

Foi útil?

Solução

Para qualquer outra pessoa que tem este problema, a solução que eu encontrei foi a de criar um componente personalizado estendendo o mx.controls.Text

e, em seguida, substituir o styleChange () Método, e explicitamente chamar o método invalidateDisplayList () do campo de texto uma vez que o estilo foi aplicado.

Ele deve ser chamado automaticamente quando o styleis mudado, mas não ... por alguma razão em flex 3.5 não é.

classe pública textobject estende Texto {// ... substituir a função pública styleChanged (styleProp: String): void {invalidateDisplayList (); } }

Hope que salvar alguém todo o tempo que eu perdi sobre ele.

Outras dicas

Per a documentação da Adobe para Texto

Dimensionando um controle de texto

tamanhos Flex a controle de texto da seguinte forma:

Se você especificar um valor de pixel para ambos as propriedades de altura e largura, qualquer texto que exceda o tamanho do controle é cortado na fronteira.

Se você especificar um pixel explícita largura, mas nenhuma altura, o cabo flexível envolve texto para ajustar a largura e calcula a altura para ajustar o número necessário de linhas.

Se você especificar um percentual com base em largura e nenhuma altura, Flex não faz quebrar o texto, e de igual altura o número de linhas, conforme determinado por o número de caracteres de retorno.

Se você especificar somente uma altura e sem largura, o valor da altura não faz afectar o cálculo largura, e Flex Tamanhos de controlo para ajustar a largura de a linha máxima.

Como regra geral, se você tem muito tempo texto, você deve especificar uma base de pixel propriedade de largura. Se o poder de texto mudar e você quer garantir que o controle de texto sempre ocupa o mesmo espaço em seu aplicativo, conjunto altura explícita e propriedades de largura que se encaixam o maior texto esperado.

Portanto, o truque que eu usei para lidar com isso é ter o texto obter sua largura através de uma expressão de ligação de quaisquer limites recipiente que de largura, normalmente o pai imediato.

por exemplo.

<mx:Canvas id="box" width="100%" backgroundColor="Red">
    <mx:Text width="{box.width}" text="{someReallyLongString}" />
</mx:Canvas>

Você pode usar uma largura de pixel fixo em vez de 100%? Eu tive problemas com 100% sendo calculado erradamente em controles de texto dinâmicos antes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top