2010-10-14 4 views
0

У меня есть средство визуализации элементов для сетки, которая имеет довольно основную функцию updateDisplayList:сетка Renderers обновления без updateDisplayList называют

override protected function updateDisplayList(w : Number, h : Number) : void 
{ 
    super.updateDisplayList(w, h); 

    var labelWidth : Number = Math.min(_labelDisplay.measuredWidth, w); 
    var labelHeight : Number = Math.min(_labelDisplay.measuredHeight, h); 

    _labelDisplay.setActualSize(labelWidth, labelHeight); 

    var labelX : Number = (w - _labelDisplay.width)/2; 
    var labelY : Number = (h - _labelDisplay.height)/2; 

    _labelDisplay.move(labelX, labelY); 

    //this is just for debugging 
    graphics.clear(); 
    graphics.beginFill(0xFF0000, 0.5); 
    graphics.drawRect(labelX, labelY, labelWidth, labelHeight); 
    graphics.endFill(); 
} 

где _labelDisplay искру этикетка. Когда я прокручиваю сетку (это сетка cuatom, а не mx: Grid или AndvancedDataGrid), когда появляются новые строки в нижней части сетки, выводится названиеDisplayList, а код для повторного рисования фона и перемещения/изменения размера метки выполняется.

Проблема в том, что эти чанеги не отражаются в представлении. Текст неправильно выровнен, так как метка, используемая для отображения большой строки, теперь отображает короткую строку, поэтому переменная measuredWidth изменилась.

В следующий раз, когда я прокручиваю обновление рендеринга, чтобы оно выглядело так, как должно, но updateDisplayList НЕ вызывается здесь (на рендерах). Все, что происходит, заключается в том, что рендеринги переориентируются в сетку. И фон, и метка отображаются неправильно, так что это не просто неправильное поведение метки.

Кто-нибудь понял, почему это происходит?

Благодаря

+0

Показывает, что ваш код updateDisplayList() не поможет нам понять, почему этот метод не вызывается. Вам нужно будет предоставить больше. Какой компонент вы расширяете? Как работают рендер и сетка? – JeffryHouser

+0

Спасибо за ответ. Я не спрашиваю, почему он не называется - я не хочу, чтобы его вызывали не один раз. Я спрашиваю, почему обновления, применяемые функцией updateDisplayList, не отображаются до тех пор, пока не произойдет следующий рендеринг. – Roaders

ответ

0

Только предположение, но это делает никакой разницы?

override protected function updateDisplayList(w : Number, h : Number) : void 
{ 
    var labelWidth : Number = Math.min(_labelDisplay.measuredWidth, w); 
    var labelHeight : Number = Math.min(_labelDisplay.measuredHeight, h); 

    _labelDisplay.setActualSize(labelWidth, labelHeight); 

    var labelX : Number = (w - _labelDisplay.width)/2; 
    var labelY : Number = (h - _labelDisplay.height)/2; 

    _labelDisplay.move(labelX, labelY); 

    super.updateDisplayList(w, h); // Call updateDisplayList after moving/resizing _labelDisplay 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^