1

我想将 2 个图表放在另一个图表下方。我希望他们共享 X 轴。所以当我移动上面的图表时,下面的图表也会移动,缩放也是如此。我发现它是在 Silverlight 的动态数据显示库中实现的。并且执行得非常好。在这里你可以看到实现。“同步数字”。我想要同样的。我该怎么做?

4

2 回答 2

1

好的。我找到了解决方案。它的工作有点错误,但没关系。如果要共享 X 轴,则必须执行以下操作:

// Add handler
        SpeedChart.Viewport.PropertyChanged += new EventHandler<ExtendedPropertyChangedEventArgs>(Viewport_PropertyChanged);


// Respond to changes
        void Viewport_PropertyChanged(object sender, ExtendedPropertyChangedEventArgs e)
        {
            if (e.PropertyName == "Visible")
            {
                StrokeChart.Viewport.Visible = new DataRect(SpeedChart.Viewport.Visible.XMin, StrokeChart.Viewport.Visible.YMin, SpeedChart.Viewport.Visible.Width, StrokeChart.Viewport.Visible.Height);
            }
        }

接下来,您必须从 StrokeChart 中删除 MouseNavigation 和 Horizo​​ntalAxisNavigation。问题是 StrokeChart 上的点一开始是不可见的,因为 Y 轴上的范围是错误的。但是您只能缩放和拖动 Y 轴以获得正确的值。如果您知道如何解决范围问题,请告诉我。谢谢

于 2013-11-07T04:46:11.067 回答
-1
void Viewport_PropertyChanged(object sender, ExtendedPropertyChangedEventArgs e)
{
    if (e.PropertyName == "Visible")
    {
        if((sender as Viewport2D).Plotter==plotter)
            plotter2.Viewport.Visible = new DataRect(plotter.Viewport.Visible.XMin, plotter2.Viewport.Visible.YMin, plotter.Viewport.Visible.Width, plotter2.Viewport.Visible.Height);
        else if ((sender as Viewport2D).Plotter == plotter2)
                plotter.Viewport.Visible = new DataRect(plotter2.Viewport.Visible.XMin, plotter.Viewport.Visible.YMin, plotter2.Viewport.Visible.Width, plotter.Viewport.Visible.Height);
    }
}


private void Window1_Loaded(object sender, RoutedEventArgs e)
{
    // Add handler
    plotter.Viewport.PropertyChanged += new EventHandler<ExtendedPropertyChangedEventArgs>(Viewport_PropertyChanged);
    plotter2.Viewport.PropertyChanged += new EventHandler<ExtendedPropertyChangedEventArgs>(Viewport_PropertyChanged);
}

两个图的全连接。对前文的补充。

于 2015-12-02T21:16:30.940 回答