我正在为WPF使用beto-rodriguez的livecharts。我从XML文件中获取图表的数据,并且比我在另一个上方绘制图表,代表数据的图表在X轴和Zoom和Zoom和Pan上具有相同数量的斑点,并且使用CH.ZOOM = ZoomingOptions.x;和ch.pan = panningoptions.x;我的问题可以放大或锅中的一个图表中的哪个图表,并且所有图表都被缩放或放置,以便我在所有图表上垂直对齐X轴?基本上,如果我在一个图表上放大或锅,所有其他图都应同时放大和锅,并以相同的数量放大。
您要做的就是为每个图表上的事件" rangechanged"创建事件处理程序。
<lvc:CartesianChart.AxisX>
<lvc:Axis Title="Time" RangeChanged="Axis_RangeChanged" Separator="{x:Static lvc:DefaultAxes.CleanSeparator}" DisableAnimations="True" />
</lvc:CartesianChart.AxisX>
在事件处理程序的情况下,您可以提取轴的新的最小值和最大值,并将其应用于页面上的所有图表
private void Axis_RangeChanged(LiveCharts.Events.RangeChangedEventArgs eventArgs)
{
//sync the graphs
double min = ((Axis)eventArgs.Axis).MinValue;
double max= ((Axis)eventArgs.Axis).MaxValue;
this.lvcChart2.AxisX[0].MinValue = min;
this.lvcChart2.AxisX[0].MaxValue = max;
this.lvcChart.AxisX[0].MinValue = min;
this.lvcChart.AxisX[0].MaxValue = max;
//Repeat for as many graphs as you have
}
使用命令和绑定可能还有其他一些很酷的方法,但这至少会让您开始。
我设法垂直执行pan并放大x轴。首先,我创建了一个读取XML并创建为LiveCharts库准备的对象的类
Axis axisX = new Axis();
Axis axisY = new Axis();
axisX.Name = "X";
axisY.Name = "Y";
然后创建一个事件,该事件像@kevin Ross一样在范围更改上发射,并且在该事件循环的方法中通过所有轴和检查轴的名称,然后更改Minvalue和Maxvalue:
void axisX_RangeChanged(LiveCharts.Events.RangeChangedEventArgs eventArgs)
{
double min = ((Axis)eventArgs.Axis).MinValue;
double max = ((Axis)eventArgs.Axis).MaxValue;
int p = 0;
string name;
foreach (Axis CartChart in FindVisualChildren<Axis>(TestGrid))
{
// do something with CartChart here
name = CartChart.Name;
if (name == "Y")
{
continue;
}
else if (name == "X")
{
CartChart.MinValue = min;
CartChart.MaxValue = max;
}
p++;
}
}