在键/鼠事件

时间:2015-08-31 17:56:14

标签: c# wpf oxyplot

我有一个Wpf应用程序,它显示了一个plotview,还有一个按钮,该按钮调用一个函数,根据数据自动缩放图。我遇到的问题是,如果我使用键盘或鼠标进行平移/缩放与plotview交互,我的自动缩放按钮,它只是设置轴的最大值和最小值,不会导致情节改变明显。我已确认在对象本身中修改了最大/最小值,但这些更改未在plotview中显示。

public class ViewModel
{
    public const int maxSamples = 45000;
    public ViewModel()
    {
        this.PlotModel = new PlotModel();

        // the x-axis
        this.PlotModel.Axes.Add(new OxyPlot.Axes.LinearAxis { 
                Position = OxyPlot.Axes.AxisPosition.Bottom, 
                AbsoluteMinimum = 0, 
                AbsoluteMaximum = maxSamples,
                Minimum = 0,
                Maximum = maxSamples
            });

        // the y-axis
        this.PlotModel.Axes.Add(new OxyPlot.Axes.LinearAxis { 
                Position = OxyPlot.Axes.AxisPosition.Left, 
                Minimum = -100, 
                Maximum = 200 
            });
    }

    public PlotModel Ch1Model { get; private set; }

    public void AutoZoom()
    {
        double max;
        double min;

        // some code to determine the max/min values for the y-axis
        // ...

        ((LinearAxis)PlotModel.Axes[1]).Maximum = max;
        ((LinearAxis)PlotModel.Axes[1]).Minimum = min;

        PlotModel.InvalidatePlot(true);
    }
}

同样,调用AutoZoom()直到我使用鼠标/键盘与plotview交互,然后AutoZoom在Axes上设置Max / Min值,但显示不会更新。我可能会出错的任何想法?

1 个答案:

答案 0 :(得分:0)

我知道这是一个在没有答案的情况下暂时停留一段时间的问题,但是当我遇到同样的问题时,我发现它仍然相关。

Axis对象的内部,有ViewMinimumViewMaximum初始化为double.NaN。使用鼠标平移,缩放等后,这些值将设置为平移/缩放操作结束的任何值。然后,在Minimum对象的任何后续重绘上,这些值优先于MaximumAxis

为了让PlotView遵循指定的MinimumMaximum,您必须通过调用Reset()方法重置轴,然后为{{{{{ 1}}和Minimum。另请注意,一旦设置MaximumMinimum,如果Maximum设置为PlotType,OxyPlot将在X和Y轴上使用相同的缩放。要没有此功能,请将Cartesian的{​​{1}}设置为Model

For Instance:

PlotType