设置键/鼠标事件后关闭OxyPlot PlotView的max/min
本文关键字:PlotView OxyPlot max min 鼠标 事件 设置 | 更新日期: 2023-09-27 18:10:30
我有一个Wpf应用程序,它显示了一个plotview,也有一个按钮,调用一个函数,根据其数据自动缩放情节。我遇到的问题是,如果我使用键盘或鼠标与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设置轴上的Max/Min值,但显示不更新。你知道我哪里做错了吗?
我知道这个问题已经有一段时间没有答案了,但是当我遇到同样的问题时,我发现它仍然是相关的。
在Axis
对象内部,有一个初始化为double.NaN
的ViewMinimum
和ViewMaximum
。一旦你用鼠标进行平移、缩放等操作,这些值就会被设置为平移/缩放操作结束时的值。在Axis
对象的任何后续重绘中,这些值将优先于Minimum
和Maximum
。
为了让PlotView
跟随指定的Minimum
和Maximum
,您必须通过调用其Reset()
方法来重置轴,然后将值赋给Minimum
和Maximum
。还要注意,一旦设置了Minimum
和Maximum
,如果将PlotType
设置为Cartesian
, OxyPlot将在X轴和Y轴上使用相同的缩放。如果不需要,请将Model
的PlotType
设置为PlotType.XY
。
public void AutoZoom()
{
double max;
double min;
// some code to determine the max/min values for the y-axis
// ...
PlotModel.Axes[1].Reset(); //Reset the axis to clear ViewMinimum and ViewMaximum
((LinearAxis)PlotModel.Axes[1]).Maximum = max;
((LinearAxis)PlotModel.Axes[1]).Minimum = min;
PlotModel.InvalidatePlot(true);
}