我想知道是否有一种方法可以在可视化图表完成渲染时获得回调。我一直在尝试创建一个图表并将其保存为图像。这工作与一个按钮按下,但不工作,如果我做它没有按钮。我猜是因为图表没有加载完成,但我不太确定。当页面被加载时,我设置了在XAML中使用的ObservableCollection值。
我基本上有几个数据系列,看起来像这样:
<vc:Chart.Series>
<vc:DataSeries RenderAs="StackedColumn" LegendText="Portion sequenced" LightingEnabled="False" AxisYType="Primary" Color="#4198AF" DataSource="{Binding SequencedValues}">
<vc:DataSeries.DataMappings>
<vc:DataMapping MemberName="AxisXLabel" Path="Key"></vc:DataMapping>
<vc:DataMapping MemberName="YValue" Path="Value"></vc:DataMapping>
</vc:DataSeries.DataMappings>
这些由ObservableCollection填充。所以我首先调用我的方法DrawImage()来设置observablecollection的值,然后调用Save()。就像我说的,Save()方法在按下按钮时自己工作,但如果我在绘制图像后调用它则不工作。我最初认为这与页面尚未完成加载有关。但使用
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<i:InvokeCommandAction Command="{Binding PageLoadCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
我只在页面加载时调用DrawImage()和Save()。我甚至尝试在DrawImage()和Save()之间设置5秒的睡眠计时器,只是为了看看是否有时间问题,我仍然只得到我的背景图像,但没有我的DataSeries。
所以我的问题是如果有一种方法在Visifire图表加载后被调用,或者如果有另一个解决方案我错过了。谢谢。
水晶,
如果你使用的是silverlight,那么你只能通过用户操作来保存图像,比如按下按钮,但是如果你使用的是WPF,那么一旦图表完全渲染完成,就可以保存图表。但是,如果您希望在填充集合后立即保存图表,那么您可以在一些延迟后(使用计时器)执行save()方法。请检查下面的代码。
MyChart.Series[0].DataSource = collection; //Populate Data
timer.Tick += new EventHandler(timer_Tick);
timer.Interval = new TimeSpan(0, 0, 0, 0, 3000);// give some delay
timer.Start();
void timer_Tick1(object sender, EventArgs e)
{
ExportToImage(new Uri("d:/visifire1.png"), MyChart);
}