Oxyplot WPF 中的水平滚动条

Horizontal Scroll Bar in Oxyplot WPF

我正在尝试实现一个实用程序来显示系统中随时间变化的吞吐量,并使用 Oxyplot 可视化数据。

目前,缩放和平移按预期工作,但我希望向用户提供一些视觉指示,清楚地显示图形是否可以缩放或平移。

在放弃使用滚动条的想法后(既不能准确获取图表可见部分的位置,也不能正确定位滚动条相对于图表的拇指),我决定了使用图标显示图表上是否有隐藏在左侧或最右侧的数据。

我希望这些图标用作允许用户在图表上左右翻页的按钮,但是与 OxyPlot 相关的所有内容一样,实现远比乍看起来复杂得多。

我正在使用 WPF 实现,它使用表示整个数据集的 ViewModel,每个系列项目由其自己的模型表示。 这实际上使几乎所有教程都变得无用,因为 WPF 实现与基本的 OxyPlot 包有很大不同。

目前,视图中的代码处理页面 left/right 按钮上的点击。我不能把它放在我的 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 图表的视图后面的代码中使用此方法。

无论当时的缩放量如何,这都应该可以正常工作。

必须从 ActualModel 获取 CategoryAxis 参考,因为 WPF.Axis 不提供计算可视区域所需的 ActualMinumumActualMaximum .

本例中的 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++;
    }