Как поменять оси в линейном графике WPF Toolkit? - PullRequest
1 голос
/ 11 января 2012

Как можно поменять оси в линейном графике WPF Toolkit?У меня есть следующее xaml:

<chartingToolkit:Chart  Name="lineChart" Title="Line Series Demo" Margin="0,0,0,0">
     <chartingToolkit:LineSeries  DependentValuePath="Key" IndependentValuePath="Value" ItemsSource="{Binding}" IsSelectionEnabled="True" />
  </chartingToolkit:Chart>

Зависимые значения всегда отображаются в виде оси Y.Мне они нужны как ось X.Возможно ли это с графиками WPF Toolkit?Если я не могу сделать это с помощью WPF Toolkit, есть ли другие бесплатные библиотеки графиков WPF, которые я могу использовать вместо этого?Все, что мне нужно, это линейный график, который может обрабатывать несколько рядов со временем по оси X и строки по оси Y.

1 Ответ

0 голосов
/ 12 января 2012

После неудачной попытки найти ответ на мою проблему с оригинальным WPF Toolkit, я решил отредактировать исходный код набора инструментов Charting. Вот изменения, которые я сделал, чтобы заставить его работать:

(Показывает изменения исходного кода, чтобы увидеть исходный код, посмотрите исходное сообщение перед редактированием)

  1. Получить источник. Я использую VS2010 и так как некоторые из компонентов из WPF Toolkit стали частью .NET4, мне пришлось модифицировать WPF Инструментарий решения. К счастью, эта работа для ног уже была сделана для меня. Получить источник здесь
  2. Изменить LineSeries.cs: 115 на

                    if (axis == null)
                    {
                       axis = new CategoryAxis();
                    } 
    
  3. Изменить LineAreaBaseSeries.cs: 243 на

       double x = ActualIndependentAxis.GetPlotAreaCoordinate(dataPoint.ActualIndependentValue).Value;
       double y = this.InternalActualDependentAxis.GetPlotAreaCoordinate(dataPoint.ActualDependentValue).Value;
    
       if (ValueHelper.CanGraph(x) && ValueHelper.CanGraph(y))
       {
          dataPoint.Visibility = Visibility.Visible;
    
          double coordinateY = Math.Round(y - (dataPoint.ActualHeight / 2));
          Canvas.SetTop(dataPoint, coordinateY);
          double coordinateX = Math.Round(x - (dataPoint.ActualWidth / 2));
          Canvas.SetLeft(dataPoint, coordinateX);
       }
       else
       {
          dataPoint.Visibility = Visibility.Collapsed;
       }
    

Изменить LineAreaBaseSeries.cs: 298 на

       Func<DataPoint, Point> createPoint =
           dataPoint =>
               new Point(
                   ActualIndependentAxis.GetPlotAreaCoordinate(dataPoint.ActualIndependentValue).Value,
                   this.InternalActualDependentAxis.GetPlotAreaCoordinate(dataPoint.ActualDependentValue).Value);
       IEnumerable<Point> points = Enumerable.Empty<Point>();
       if (ActualIndependentAxis is IRangeAxis)
       {
          points = DataPointsByIndependentValue.Select(createPoint);
       }
       else
       {
          points =
             ActiveDataPoints
                   .Select(createPoint)
                   .OrderBy(point => point.X);
       }

После этих изменений вы можете использовать зависимый источник строк.

Ура!

...