使用鼠标时滚动ScrollViewer时没有步骤/间隙

时间:2016-04-07 14:28:28

标签: xaml win-universal-app scrollviewer windows-10-universal

使用鼠标交互,当水平拖动ScrollViewer的ScrollBar时,ScrollViewer的内容会以小步骤滚动。如果应用程序使用触摸交互运行,则滚动是平滑的,没有任何步骤/间隙。如何通过触摸交互完成没有步骤/间隙的鼠标滚动?

桌面: enter image description here

鼠标: enter image description here

1 个答案:

答案 0 :(得分:0)

解决方法是隐藏ScrollViewer的ScrollBar并直接使用单击并拖动鼠标事件。 WaveformScroller是ScrollViewer。 WaveformCanvas是滚动控件。

Vector2 lastDragPoint;
bool pointerPressed;

WaveformCanvas.PointerPressed += (sender, args) =>
{
        WaveformCanvas.CapturePointer(args.Pointer);
        lastDragPoint = args.GetCurrentPoint((UIElement)sender).Position.ToVector2();
        pointerPressed = true;
};

WaveformCanvas.PointerMoved += (sender, args) =>
{
    if (pointerPressed)
    {
        var newDragPoint = args.GetCurrentPoint((UIElement)sender).Position.ToVector2();
        var deltaX = newDragPoint.X - lastDragPoint.X;
        var newOffset = WaveformScroller.HorizontalOffset - deltaX;
        WaveformScroller.HorizontalOffset = WaveformScroller.HorizontalOffset - deltaX;
    }
};

WaveformCanvas.PointerReleased += (sender, args) =>
{
    pointerPressed = false;
    WaveformCanvas.ReleasePointerCapture(args.Pointer);
};