Попробуйте это ... Это все еще основано на коде Алекса, который был упомянут выше. Его по-прежнему должно стать отличным началом для снятия привязки к ряду. Первоначальный источник:
http://blogs.adobe.com/aharui/2008/03/smooth_scrolling_list.html
Оригинальный код Алекса для плавной вертикальной прокрутки, но это не было проблемой, с которой я столкнулся в DataGrid. Это была плавная горизонтальная прокрутка, которая мне была нужна. Я использую DataGrid необычным способом для анализа текстовых отчетов, выводимых нашей базой данных (отличный способ обеспечить визуальную обратную связь с документом). Приведенный ниже код позволяет содержимому отключаться от экрана, и пользователь может прокручивать его без привязки к столбцу.
Вы можете приспособить это, чтобы использовать те же самые математические процедуры для вертикальной прокрутки, и тогда это сделает возможным прокрутку и проигнорирует поведение привязки к строке. В частности, переключите использование метода listContent.move для перемещения содержимого по вертикали и используйте обратное значение округленного пикселя, которое вы вычисляете по вертикальной полосе прокрутки (в отличие от моего использования горизонтальной).
Этот метод немного проще, чем метод Алекса по ссылке выше - кода гораздо меньше, поэтому попробуйте адаптировать и посмотрите, как он работает.
override protected function scrollHandler(event:Event):void
{
// Override the default scroll behavior to provide smooth horizontal scrolling and not the usual "snap-to-column" behavior
var scrEvt:ScrollEvent = event as ScrollEvent;
if(scrEvt.direction == ScrollEventDirection.HORIZONTAL) {
// Get individual components of a scroll bar for measuring and get a horizontal position to use
var scrDownArrow:DisplayObject = horizontalScrollBar.getChildAt(3);
var sctThumb:DisplayObject = horizontalScrollBar.getChildAt(2);
// I replaced maxHorizontalScrollPosition in Alex's code with "1300" to fix my exact application. In other situations you may finding using some property or different value is more appropriate. Don't rely on my choice.
var hPos:Number = Math.round((sctThumb.y - scrDownArrow.height) / (scrDownArrow.y - sctThumb.height - scrDownArrow.height) * 1300);
// Inverse the position to scroll the content to the left for large reports
listContent.move(hPos * -1, listContent.y);
}
// Go ahead and use the default handler for vertical scrolling
else {
super.scrollHandler(event);
}
}