2013-05-29 4 views
0

Я пытаюсь создать простую диаграмму с YAxis и SecondaryYAxis с тем же диапазоном и масштабированием. Там у меня есть две проблемы:Связывание вторичного YAxis для изменения и масштабирования от первичного YAxis в диаграмме Visiblox

1) связывание диапазона и масштабирования, кажется, не работает, как ожидалось:

<charts:Chart.YAxis> 
    <charts:LinearAxis LabelsPosition="Inside" x:Name="PrimaryAxis"/> 
</charts:Chart.YAxis> 

<charts:Chart.SecondaryYAxis> 
    <charts:LinearAxis LabelsPosition="Inside" 
     Range="{Binding ElementName=PrimaryAxis, Path=ActualRange}" 
     Zoom="{Binding ElementName=PrimaryAxis, Path=Zoom}" 
     AutoScaleToVisibleData="False"/> 
</charts:Chart.SecondaryYAxis> 

, если у меня есть одна серия отображается на YAxis и другой серии отображается на SecondaryYAxis оба имеют разные масштабы или диапазонов.

2) Если у меня нет серий, отображаемых на SecondaryYAxis (так как я хочу, чтобы обе оси отображали одни и те же данные, нет смысла использовать SecondaryYAxis), «неиспользуемый» SecondaryYAxis не отображает Lables или Ticks at все.

Чтобы задать вопрос: Как я могу позволить диаграмме показать тот же YAxis слева и справа?

======= ======= EDIT

ОК, а @NielW указывал, я ничего плохого не делал. Проблема заключалась в том, что у меня есть диаграмма в TabControl, которая привела к тому, что график не установил привязку, как указано в XAML. Не спрашивайте меня, почему, но вот ошибка:

Вместо установки привязки в XAML, я сделать это вручную из кода позади:

var primary = ResultChart.YAxis as LinearAxis; 
var secondary = ResultChart.SecondaryYAxis as LinearAxis; 

var rangeBinding = new Binding("ActualRange") 
    { 
     Source = primary 
    }; 
secondary.SetBinding(LinearAxis.RangeProperty, rangeBinding); 

var zoomBinding = new Binding("Zoom") 
    { 
     Source = primary 
    }; 
secondary.SetBinding(LinearAxis.ZoomProperty, zoomBinding); 

Я понятия не имею, почему связывание в XAML Безразлично» t, когда диаграмма помещается в TabControl. Может быть, кто-то может это понять ?!

ответ

1

Я получил ваш код для работы без проблем. Я изменил «LabelsPosition» на LabelPosition, чтобы он скомпилировался. Я предполагаю, что проблема связана с кодом, который вы не показываете, например, как вы добавляете серию в свою диаграмму.

Вот мой код. Надеюсь, вы сможете использовать это, чтобы заставить вас работать правильно.

<Window x:Class="Graphs.VBGraph" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:charts="clr-namespace:Visiblox.Charts;assembly=Visiblox.Charts" 
    Title="Visiblox" Height="350" Width="525" Loaded="Window_Loaded" SizeChanged="Window_SizeChanged"> 
<Grid> 

    <charts:Chart x:Name="Chart" > 
     <charts:Chart.Series> 
      <charts:RasterLineSeries AntiAliasingEnabled="True" ShowLine="False" ShowPoints="True"> 
       <charts:RasterLineSeries.DefaultStyle> 
        <charts:LineSeriesStyle PointFill="Transparent" PointSize="3" PointStroke="Blue"/> 
       </charts:RasterLineSeries.DefaultStyle> 
      </charts:RasterLineSeries>     
     </charts:Chart.Series> 

     <charts:Chart.YAxis> 
      <charts:LinearAxis x:Name="PrimaryAxis" LabelPosition="Inside"/> 
     </charts:Chart.YAxis> 
     <charts:Chart.SecondaryYAxis> 
      <charts:LinearAxis LabelPosition="Inside" 
       Range="{Binding ElementName=PrimaryAxis, Path=ActualRange}" 
       Zoom="{Binding ElementName=PrimaryAxis, Path=Zoom}" 
       AutoScaleToVisibleData="False"/> 
     </charts:Chart.SecondaryYAxis> 
    </charts:Chart> 
</Grid> 

И файл Код:

using System; 
using System.Windows; 
using Visiblox.Charts; 

namespace Graphs 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class VBGraph : Window 
    { 
     public VBGraph() 
     { 
      InitializeComponent(); 
     } 

     private void draw() 
     { 
      if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this)) 
       return; 
      Random r = new Random(); 
      DataSeries<double, double> xData = new DataSeries<double, double>(); 
      for (int i = 0; i < 500; i++) 
      { 
       xData.Add(new DataPoint<double, double>() { X = (double)r.Next((int)ActualWidth), Y = (double)r.Next((int)ActualHeight) }); 
      } 
      Chart.Series[0].DataSeries = xData; 
     } 

     private void Window_Loaded(object sender, RoutedEventArgs e) 
     { 
      draw(); 
     } 

     private void Window_SizeChanged(object sender, SizeChangedEventArgs e) 
     { 
      draw(); 
     } 
    } 
} 
+0

Примечание Я только добавить серию к графику один раз. Ему не важно, с какой осью следует строить его. Если вы не укажете, какую ось использовать, он будет использовать оба. – NielW

Смежные вопросы