2017-11-24 9 views
0

私はbeto-rodriguezのライブチャートをWPF用に使用しています。私はxmlファイルからグラフのデータを取得し、グラフを上に1つずつ上に描画し、データを表すグラフはX軸上に同じ数のスポットを持ち、ZOOMとPANはch.Zoom = ZoomingOptions.Xで有効になります。 ch.Pan = PanningOptions.X; 私の質問は、それらのチャートのいずれか(それは関係ありません)を拡大またはパンすることが可能であり、それらのすべてが拡大またはパンされているので、それらのすべてのX軸を垂直に揃えていますか?基本的に、1つのグラフをズームまたはパンすると、他のすべてのグラフは同じ時間に、同じ量でズームおよびパンする必要があります。ライブチャートで複数のグラフを拡大/パンする方法

答えて

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を読み取り、livechartsライブラリのために用意されたオブジェクトを作成するクラスを作成し、その後、私は動的にグラフを作成し、名前を軸

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

を、すべてを与え、その後@Kevinのような範囲の変化に発射されたイベントを作成します私は、リストでグラフをキャッシュし、実行時にグラフを追加している場合を除き

 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

:ロスは述べたと方法でそのイベントループのためにすべての軸を通って、軸の名前をチェックしてから、このようのminValueとmaxValueのを変更しますあなたのコードは、ループが呼び出されるたびにビジュアルツリーを移動する必要はありません。それがたくさん呼ばれると、パフォーマンスのボトルネックになる可能性があります。 –

+0

はい私は最初のグラフの数を知らないので、実行時にグラフを追加しています。 .add()メソッドはボトルネックにつながることは知っていますが、他の方法はないと思います。 – LBajlo

+1

はい、一度追加してしまえばキャッシュするので、すべてのループでツリーを歩いているわけではありません。フォームの存続期間中にそれらを追加/削除すると、キャッシュを無効にするだけで、キャッシュが再びロードされます。 –

関連する問題