Oxyplot WPF中的水平滚动条

时间:2017-07-11 11:37:30

标签: c# wpf oxyplot

我正在尝试实现一个实用程序,用于在系统中显示吞吐量,并使用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滚动到给定位置,我将不胜感激。 作为最后的手段,我一直在考虑尝试模拟鼠标拖动事件以使这个挑剔的野兽表现出来。

我发现以这种方式解决这个问题的必要性非常令人反感,但是解散导致奇怪的解决方案......

1 个答案:

答案 0 :(得分:1)

如果其他人遇到此问题,以下代码段将根据当时图表上可见的列数滚动页面中的图表。

该片段将可见列的数量作为视口,并将按视口大小移动可见区域。

虽然这适用于WPF实现,但我能找到的唯一方法是从包含OxyPlot图表的View中的代码运行此方法。

无论当时的变焦量如何,这都应正常工作。

必须从CategoryAxis获取ActualModel引用,因为WPF.Axis未提供计算可见区域所需的ActualMinumumActualMaximum。< / 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++;
    }