2017-01-26 2 views
0

J'ai un PlotModel avec plusieurs LineSeries peint. Ce que je cherche est une astuce pour sélectionner toutes les LineSeries dont le point, détecté par l'événement MouseDown, appartient à.OxyPlot trouver les LineSeries sélectionnés

Je l'ai fait:

this.MouseDown += CheckIfLineSeriesHasBeenSelected; 

private void CheckIfLineSeriesHasBeenSelected(object sender, OxyMouseDownEventArgs e) 
{ 
    switch (e.ChangedButton) 
    { 
      case OxyMouseButton.Left: 
       var series = (LineSeries) this.GetSeriesFromPoint(e.Position, 10); 
       series.StrokeThickness = 4; 
      break; 
     } 
} 

Mais de cette manière le modèle des changements de l'épaisseur de seulement une petite partie de l'ensemble LineSeries. Avez-vous des suggestions? Merci!

Répondre

0

Vous pouvez effectuer une recherche au hasard autour e.Position et sélectionnez la série:

private void PlotModel_MouseDown(object sender, OxyMouseDownEventArgs e) 
    { 
     int radius = 5; 
     List<LineSeries> ss = new List<LineSeries>(); 
     searchAndAdd(ref ss, e.Position); 
     Random rand = new Random(); 
     for (int i = 0; i < 100; i++) 
     { 
      double x = rand.Next(-radius, radius); 
      double y = rand.Next(-radius, radius); 
      ScreenPoint pos = new ScreenPoint(e.Position.X + x, e.Position.X); 
      searchAndAdd(ref ss, pos); 
     } 
     foreach (var s in ss) 
      s.StrokeThickness = 8; 
     plotModel.InvalidatePlot(false); 
    } 
    void searchAndAdd(ref List<LineSeries> series, ScreenPoint pos) 
    { 
     var s = plotModel.GetSeriesFromPoint(pos, 10) as LineSeries; 
     if (s != null && series.Contains(s) == false) 
      series.Add(s); 
    } 

Notez que radius détermine jusqu'où vous allez chercher. Notez également que vous devez appeler le plotModel.InvalidatePlot(false); à la fin.