基本上标题是什么。我检查了DataGridSkin,它有一个Scroller皮肤部分,但我找不到滚动量的任何属性。我可能错过了它。 有人可以帮我解决这个问题吗?感谢。
答案 0 :(得分:3)
我建议如下。您可以在VScrollBar
方法的mouseWheelHandler
类中找到部分滚动逻辑。
var nSteps:uint = Math.abs(delta);
...
for (var vStep:int = 0; vStep < nSteps; vStep++)
{
var vspDelta:Number = vp.getVerticalScrollPositionDelta(navigationUnit);
...
在我的情况下,delta
等于3
。并且网格滚动3个渲染器高度。您可以扩展VScrollBar类。然后创建自定义ScrollerSkin(从原始版本复制)并在那里设置垂直条而不是默认条。然后创建自定义DataGrid
皮肤(再次从原始皮肤复制)并在那里为Scroller
设置自定义滚动皮肤。
在自定义VScrollBar类中重写mouseWheelHandler
方法。例如:
package {
import flash.events.Event;
import flash.events.MouseEvent;
import mx.core.IInvalidating;
import mx.core.mx_internal;
import mx.events.FlexMouseEvent;
import spark.components.VScrollBar;
import spark.core.IViewport;
import spark.core.NavigationUnit;
import spark.utils.MouseEventUtil;
use namespace mx_internal;
public class MyVScrollBar extends VScrollBar {
public function MyVScrollBar() {
}
override mx_internal function mouseWheelHandler(event:MouseEvent):void {
const vp:IViewport = viewport;
if (event.isDefaultPrevented() || !vp || !vp.visible || !visible)
return;
var changingEvent:FlexMouseEvent = MouseEventUtil.createMouseWheelChangingEvent(event);
if (!dispatchEvent(changingEvent))
{
event.preventDefault();
return;
}
const delta:int = changingEvent.delta;
var nSteps:uint = 1; //number of renderers scrolled!
var navigationUnit:uint;
var scrollPositionChanged:Boolean;
navigationUnit = (delta < 0) ? NavigationUnit.DOWN : NavigationUnit.UP;
for (var vStep:int = 0; vStep < nSteps; vStep++)
{
var vspDelta:Number = vp.getVerticalScrollPositionDelta(navigationUnit);
if (!isNaN(vspDelta))
{
vp.verticalScrollPosition += vspDelta;
scrollPositionChanged = true;
if (vp is IInvalidating)
IInvalidating(vp).validateNow();
}
}
if (scrollPositionChanged)
dispatchEvent(new Event(Event.CHANGE));
event.preventDefault();
}
}
}
将nSteps
变量设置为您想要滚动的渲染器数量。因此,在此示例中,网格仅滚动一个项目。
答案 1 :(得分:0)
我找到了一个解决方案:我使用了上述想法,但是我没有创建扩展VScrollBar的类,而是在Scroller皮肤的滚动条中添加了一个MouseWheelChanging事件监听器:
<fx:Component id="verticalScrollBarFactory">
<s:VScrollBar visible="false" mouseWheelChanging="outerDocument.vScrollBarWheelChanging(event)"/>
</fx:Component>
internal function vScrollBarWheelChanging(event:MouseEvent):void
{ event.delta/=Math.abs(event.delta); }
您可以将event.delta
设置为所需的滚动量。