我正在尝试实现一个实用程序,用于显示系统中随时间的吞吐量,并且正在使用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滚动到给定位置的可能方法,我将不胜感激。
作为最后的手段,我考虑过尝试模拟鼠标拖动事件,以使这种挑剔的野兽表现出来。
我发现有必要以这种方式来解决问题,这很令人反感,但是绝望会导致解决方案奇怪……
最佳答案
万一其他人遇到此问题,以下代码段将根据当时在图形上可见的列数在页面中滚动图形。
该代码段将可见列数作为视口,并将视口大小移动可见区域。
尽管这适用于WPF实现,但我能找到的唯一方法是从包含OxyPlot
图表的View后面的代码中运行此方法。
不论当时的变焦量如何,此功能均应正常工作。
必须从CategoryAxis
获取ActualModel
引用,因为WPF.Axis
不提供计算可见区域所需的ActualMinumum
和ActualMaximum
。
在这种情况下,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++;
}
关于c# - Oxyplot WPF中的水平滚动条,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45033469/