我有一个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值,但显示不会更新。我可能会出错的任何想法?
答案 0 :(得分:0)
我知道这是一个在没有答案的情况下暂时停留一段时间的问题,但是当我遇到同样的问题时,我发现它仍然相关。
在Axis
对象的内部,有ViewMinimum
和ViewMaximum
初始化为double.NaN
。使用鼠标平移,缩放等后,这些值将设置为平移/缩放操作结束的任何值。然后,在Minimum
对象的任何后续重绘上,这些值优先于Maximum
和Axis
。
为了让PlotView
遵循指定的Minimum
和Maximum
,您必须通过调用Reset()
方法重置轴,然后为{{{{{ 1}}和Minimum
。另请注意,一旦设置Maximum
和Minimum
,如果Maximum
设置为PlotType
,OxyPlot将在X和Y轴上使用相同的缩放。要没有此功能,请将Cartesian
的{{1}}设置为Model
。
For Instance:
PlotType