我正在尝试实现一个实用程序,用于在系统中显示吞吐量,并使用Oxyplot可视化数据。
目前,缩放和平移正在按预期工作,但我想向用户提供一些视觉指示,清楚地显示图表是否可以缩放或平移。
在放弃使用滚动条的想法(既不能准确获取图形的可见部分的位置,也没有正确定位滚动条的拇指与图表相关),我已经决定使用图标显示图表上是否有隐藏在左侧或最右侧的数据。
我希望这些图标作为按钮工作,允许用户在图表上左右翻页,但是与OxyPlot相关的所有内容一样,实现远比最初看起来复杂得多。
我正在使用WPF实现,它使用表示整个数据集的ViewModel,每个系列项由其自己的模型表示。 这有效地使几乎每个教程都无用,因为WPF实现与基本的OxyPlot包明显不同。
目前,视图中的代码处理页面左/右按钮上的单击。我不能把它放在我的ViewModel中,因为它必须直接与PlotControl对象进行交互。
private void btnPageRight_Click(object sender, RoutedEventArgs e) {
CategoryAxis axis = (CategoryAxis)PlotControl.ActualModel.Axes[0];
double xAxisMin = axis.ActualMinimum;
double xAxisMax = axis.ActualMaximum;
double visibleSpan = xAxisMax - xAxisMin;
double newMinOffset = xAxisMax + visibleSpan;
PlotControl.Axes[0].Minimum = newMinOffset;
PlotControl.Axes[0].Maximum = newMinOffset + visibleSpan;
PlotControl.ActualModel.InvalidatePlot(true);
}
按照目前的情况,上面的代码不会抛出任何错误,但它也不起作用。
如果有人可以建议一种可能的方法,只使用后面的代码使OxyPlot滚动到给定位置,我将不胜感激。 作为最后的手段,我一直在考虑尝试模拟鼠标拖动事件以使这个挑剔的野兽表现出来。
我发现以这种方式解决这个问题的必要性非常令人反感,但是解散导致奇怪的解决方案......
答案 0 :(得分:1)
如果其他人遇到此问题,以下代码段将根据当时图表上可见的列数滚动页面中的图表。
该片段将可见列的数量作为视口,并将按视口大小移动可见区域。
虽然这适用于WPF实现,但我能找到的唯一方法是从包含OxyPlot
图表的View中的代码运行此方法。
无论当时的变焦量如何,这都应正常工作。
必须从CategoryAxis
获取ActualModel
引用,因为WPF.Axis
未提供计算可见区域所需的ActualMinumum
和ActualMaximum
。< / p>
在这种情况下,visibleSpan
表示列数,panStep
表示平移的数量(以像素为单位)。
private void ScrollInPages() {
//To zoom on the X axis.
CategoryAxis axis = (CategoryAxis)PlotControl.ActualModel.Axes[0];
double visibleSpan = axis.ActualMaximum - axis.ActualMinimum;
double panStep = 0;
//Scrolling the chart - comment out as appropriate
//Scroll right one page
panStep = axis.Transform(0 - (axis.Offset + visibleSpan));
//Scroll left one page
panStep = axis.Transform(axis.Offset + visibleSpan);
axis.Pan(panStep);
PlotControl.InvalidateFlag++;
}