我想要一个简单的图表,YAxis和SecondaryYAx都具有相同的范围和缩放。我有两个问题:
1)Range和Zoom的绑定似乎不能按预期工作:
<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上显示一个系列而在SecondaryYAx上显示的另一个系列都有不同的比例或范围。
2)如果我没有在SecondaryYAxis上显示系列(因为我希望两个轴显示相同的数据,使用SecondaryYAxis没有意义),“未使用的”SecondaryYAxis根本不显示Lables和Ticks 。
简短地提问我:如何让图表在左侧和右侧显示相同的YAxis?
=======编辑=======
好的,正如@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);
我不知道为什么当图表放在TabControl中时,xaml中的绑定不起作用。也许有人可以详细说明一下?!
答案 0 :(得分: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();
}
}
}