1

我在我的 C# WPF 应用程序中使用了一个简单的 ChartPlotter。当我通过鼠标滚动放大/缩小时,两个轴都发生了变化。如何通过鼠标滚动控制缩放,使其仅影响 X 轴?

4

2 回答 2

1

此功能已内置在 D3 中,如果您将鼠标悬停在其中一个轴上并进行鼠标滚轮滚动,则缩放仅与您悬停在的轴有关。如果你想在你的代码中复制它,你可以在源代码中看到它的例子。

于 2013-01-14T14:07:28.800 回答
0

缩放功能在“MouseNavigation.cs”中实现。MouseWheel 处理程序将调用下面的函数:

Viewport.Visible = Viewport.Visible.Zoom(zoomTo, zoomSpeed);

幸运的是,有一个 ZoomX 功能可以满足您的需求。因此,只需从您的绘图仪中删除 MouseNavigation,然后重新实现您自己的,如下所示:

    // Remove mouse navigation
    plotter.Children.Remove(plotter.MouseNavigation);

    // ZoomX when wheeling mouse
    private void plotter_MouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e)
    {
        if (!e.Handled)
        {
            Point mousePos = e.GetPosition(this);
            Point zoomTo = mousePos.ScreenToViewport(plotter.Viewport.Transform);

            double zoomSpeed = Math.Abs(e.Delta / Mouse.MouseWheelDeltaForOneLine);
            zoomSpeed *= 1.2;
            if (e.Delta < 0)
            {
                zoomSpeed = 1 / zoomSpeed;
            }

            plotter.Viewport.SetChangeType(ChangeType.Zoom);
            plotter.Viewport.Visible = plotter.Viewport.Visible.ZoomX(zoomTo, zoomSpeed);
            plotter.Viewport.SetChangeType();
            e.Handled = true;
        }
    }
于 2016-06-07T04:26:45.737 回答