2017-01-26 6 views
0

PlotModel에는 LineSeries이 그려져 있습니다. 내가 찾고있는 것은 MouseDown 이벤트로 감지되는 지점이 속한 모든 LineSeries를 선택하는 속임수입니다.OxyPlot은 선택된 LineSeries를 찾습니다

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; 
     } 
} 

을하지만이 방법으로 모델은 전체 LineSeries의 단지 작은 부분의 두께를 변경합니다

나는이 일을했습니다. 의견이 있으십니까? 감사합니다.

답변

0

당신은 e.Position 주위에 무작위로 검색하고 시리즈를 선택할 수 있습니다 radius 당신이 검색하려고 얼마나 멀리 결정

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); 
    } 

하는 것으로. 끝 부분에 plotModel.InvalidatePlot(false);으로 전화해야합니다.