1

C# WPF アプリケーションで単純な ChartPlotter を使用しています。マウスのスクロールでズームイン/アウトすると、両方の軸が変更されます。マウスのスクロールによるズームを制御して、X 軸のみに影響を与えるにはどうすればよいですか?

4

2 に答える 2

1

この機能はすでに D3 に組み込まれています。マウスを軸の 1 つに合わせてマウス ホイール スクロールを行うと、マウスを合わせた軸にのみズームが適用されます。これを自分のコードで複製したい場合は、ソース コードでその例を確認できます。

于 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 に答える