我正在使用WPFToolKit创建折线图。
图表显示正常,但是我想在第一次加载图表后点击模式窗口时更改Y轴的最大属性。并且应使用更新的Y轴最大值
刷新图表下面一行显示了如何在xaml中定义图表。
<DVC:Chart Canvas.Top="80" Canvas.Left="10" Name="mcChart" VerticalAlignment="Stretch"/>
我在windows.xaml.cs构造函数中调用下面的代码,并将Y-Axis Max设置为200
mcChart.Axes.Add(new LinearAxis()
{
Minimum = 0,
Maximum = YMax > 0 ? YMax : 200,
Orientation = AxisOrientation.Y,
ShowGridLines = true,
});
mcChart.UpdateLayout();
如何从模态窗口的按钮单击事件更改Y轴最大值并刷新图表以使用新的YMax显示。
我不确定我是否必须对RegisteredListeners做些什么。 我是WPF的新手,感谢任何帮助!
请注意,我希望从后面的C#代码中实现这一点,而不是在xaml中。
谢谢, Sujay
答案 0 :(得分:2)
如果您有权访问图表,则可以找到必要的轴并更改Maximum
属性而不更新布局。以下是线性Y轴的示例:
var yAxis = this.mcChart.ActualAxes.OfType<LinearAxis>().FirstOrDefault(ax => ax.Orientation == AxisOrientation.Y);
if (yAxis != null)
yAxis.Maximum = 300;
此示例的完整版本:
<强> MainWindow.xaml 强>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Button Content="Set max value = 300" HorizontalAlignment="Center" Click="Button_Click"/>
<charting:Chart Grid.Row="1" x:Name="mcChart">
<charting:Chart.Series>
<charting:LineSeries ItemsSource="{Binding LineItems}" IndependentValuePath="Date" DependentValuePath="Value"/>
</charting:Chart.Series>
</charting:Chart>
</Grid>
<强> MainWindow.xaml.cs 强>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
//Add a linear Y axis
int YMax = 150;
mcChart.Axes.Add(new LinearAxis()
{
Minimum = 0,
Maximum = YMax > 0 ? YMax : 200,
Orientation = AxisOrientation.Y,
ShowGridLines = true,
});
//Create and set a view model
var items = Enumerable.Range(0, 50).Select(i => new ChartItemModel { Date = new DateTime(2010, 1, 1).AddDays(i), Value = 30 + i }).ToList();
this.DataContext = new MainViewModel { LineItems = items };
}
//Set Maximum=300
private void Button_Click(object sender, RoutedEventArgs e)
{
var yAxis = this.mcChart.ActualAxes.OfType<LinearAxis>().FirstOrDefault(ax => ax.Orientation == AxisOrientation.Y);
if (yAxis != null)
yAxis.Maximum = 300;
}
}
public class MainViewModel
{
public List<ChartItemModel> LineItems { get; set; }
}
public class ChartItemModel
{
public DateTime Date { get; set; }
public double Value { get; set; }
}