2013-05-29 3 views
0

기본 YAxis에서 바인딩 YAxis 및 SecondaryYAxis 동일한 범위 및 확대/축소를 모두 가진 간단한 차트를하려고합니다. 이 난 두 가지 문제가있다 : 만약 내가 한 시리즈는 y 축에 표시하고 다른 시리즈는 모두 서로 다른 스케일이 SecondaryYAxis에 표시범위 YAxis 범위 및 Visiblox 차트

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

:

1) 범위 및 확대의 결합은 예상대로 작동하지 않을 것 또는 범위.

2) SecondaryYAxis에 시리즈가 표시되지 않은 경우 (두 축 모두 동일한 데이터를 표시하려고하므로 SecondaryYax를 사용하지 않아도됩니다), "사용하지 않은"SecondaryYaxis는 Lables 또는 Ticks를 표시하지 않습니다. 모든.

내 질문을 짧게 넣으려면 차트에 왼쪽과 오른쪽에 동일한 YAx가 표시되도록하려면 어떻게해야합니까?

======= 편집 =======

OK, @NielW가 지적했듯이, 난 아무것도 잘못하지 않았다. 문제는 차트를 에 XAML에 지정된 바인딩을 설정하지 않은 TabControl에있는 차트가 있다는 것입니다. 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에서 바인딩은 '아무튼 왜 아무 생각이 왜 나 한테 물어하지만, 여기에 수정하지 마십시오 차트가 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