2017-11-24 16 views
0

저는 beto-rodriguez의 WPF 용 라이브 차트를 사용하고 있습니다. 나는 XML 파일로부터 차트를위한 데이터를 얻고, 차트 하나를 위에 그린다. 데이터를 나타내는 차트는 X 축에 같은 수의 스폿을 가지고 ZOOM과 PAN은 ch.Zoom = ZoomingOptions.X로 활성화된다. 및 ch.Pan = PanningOptions.X; 내 질문에 해당 차트 중 하나 (그게 중요하지 않습니다) 확대 및 팬 및 그 모든 세로 또는 X 축 정렬 할 수 있도록 확대 또는 패닝 할 수 있습니까? 기본적으로 한 차트에서 확대/축소 또는 이동하는 경우 다른 모든 차트는 같은 시간에 같은 양만큼 확대/축소 및 이동해야합니다.라이브 차트 라이브러리를 사용하여 여러 차트를 확대/축소하는 방법

답변

0

은 당신이해야 할 것은 당신이 그 축에 대한 새로운 최소 및 최대 값을 추출 할 수있는 이벤트 핸들러에서 각 그래프 '축

<lvc:CartesianChart.AxisX> 
      <lvc:Axis Title="Time" RangeChanged="Axis_RangeChanged" Separator="{x:Static lvc:DefaultAxes.CleanSeparator}" DisableAnimations="True" /> 
     </lvc:CartesianChart.AxisX> 

의 이벤트 "RangeChanged"에 대한 이벤트 핸들러를 생성하고 이 명령을 사용하여 바인딩에 의해 다른 멋진 방법이 될 수도 있지만 적어도 당신이 시작 얻을 것이다

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 
    } 

페이지에 당신이 가진 모든 그래프에 적용합니다.

0

나는 팬을 관리하고 X 축을 수직으로 줌한다. 는 첫째로 나는 XML을 읽고

  Axis axisX = new Axis(); 
      Axis axisY = new Axis(); 
      axisX.Name = "X"; 
      axisY.Name = "Y"; 

다음 @Kevin 같은 범위의 변화에 ​​해고되는 이벤트를 만들 livecharts 라이브러리 준비 나는 동적 차트를 작성하고 이름 축마다 제공되는 객체를 생성하는 클래스를 생성 로스 언급 한 후 축이 이벤트의 모든 축 통해 루프 및 확인 이름에 대한 방법과 같은 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++; 
     } 

    } 
+0

나는 목록에서 차트를 캐시 것 코드가 있으므로 루프가 호출 될 때마다 시각적 트리를 탐색 할 필요가 없습니다. 이것이 많이 불리는 경우 성능 병목 현상이 될 수 있습니다. –

+0

예 그래프의 수를 처음부터 알지 못하기 때문에 런타임에 그래프를 추가하고 있습니다. .add() 메서드는 병목 현상을 일으킬 수 있지만 다른 방법은 없다고 생각합니다. – LBajlo

+1

예.하지만 일단 추가하면 캐시 할 것이므로 모든 루프마다 트리를 걷지 않을 것입니다. 폼의 수명 동안 추가/제거하면 캐시가 무효화되고 다시로드됩니다. –