2011-03-17 2 views
1

У меня есть странная проблема с verticalScrollPosition в Flex. У меня есть холст и холст холста. Содержимое велико (5000px X 5000px), оболочка 800px X 800px.Canvas 'verticalScrollPosition не может быть изменен в Flex

public var wrapper:Canvas = new Canvas(); 
public var content:Canvas = new Canvas(); 
wrapper.addChild(content); 
application.addChild(wrapper); 

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

wrapper.verticalScrollPosition = A; 
wrapper.horizontalScrollPosition = B; 

Это нормально работает. Но! Если установить положение в полосы прокрутки по умолчанию, когда холст завершения:

wrapper.addEventListener(FlexEvent.CREATION_COMPLETE, function(e:FlexEvent):void{ 
    wrapper.verticalScrollPosition = DEFAULT_A; 
    wrapper.horizontalScrollPosition = DEFAULT_B; 
}); 

Я не могу установить verticalScrollPosition больше:

wrapper.verticalScrollPosition = C; 
trace(wrapper.verticalScrollPosition); // Outputs: DEFAULT_A 

Так что проблема существует только если установить позицию по умолчанию с помощью «FlexEvent .CREATION_COMPLETE. Что я здесь делаю неправильно?

Заранее спасибо.

+0

Вы подтвердили, что неназванная функция называется –

+0

Она вызывается только один раз, когда холст готовится. – itarato

ответ

0

Я нашел проблему. Я подключил прослушиватель событий к дочернему узлу обертки. Когда я добавил слушателя к самой оболочке, он работает.

Так урок, который я узнал: всегда отслеживайте самые важные события элемента ui, с которыми вы должны работать.

0

Я нашел ужасный обходной путь - я жду 1 микросекунду, чтобы установить состояние по умолчанию:

wrapper.addEventListener(FlexEvent.CREATION_COMPLETE, function(e:FlexEvent):void{ 
    setTimeout(
    function():void{wrapper.verticalScrollPosition = DEFAULT_A;}, 
    1 
); 
}); 

Я думаю, что мы можем согласиться, что это действительно некрасиво. Как я могу сделать это лучше?

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